sql >> Databáze >  >> RDS >> Mysql

Použití příkazu OR na WHERE v MySql způsobí pomalé provádění

Ano, OR je často zabijákem výkonu. Běžným řešením je udělat UNION . Pro váš příklad:

SELECT  *
    FROM  `posts`
    LEFT JOIN  `teams_users`
               ON (teams_users.team_id=posts.team_id
              AND  teams_users.user_id='7135')
    WHERE  (teams_users.status='1')
UNION DISTINCT
SELECT  *
    FROM  `posts`
    LEFT JOIN  `teams_users`
               ON (teams_users.team_id=posts.team_id
              AND  teams_users.user_id='7135')
    WHERE  (posts.user_id='7135');

Pokud jste si jisti, že nedochází k dupsům, přejděte na rychlejší UNION ALL .

Pokud nelovíte chybějící team_users řádků, použijte JOIN místo LEFT JOIN .

Pokud potřebujete ORDER BY , přidejte nějaké závorky:

( SELECT ... )
UNION ...
( SELECT ... )
ORDER BY ...

V opačném případě ORDER BY by se vztahovalo pouze na druhý SELECT . (Pokud potřebujete také 'stránkování', podívejte se na můj blog .)

Upozorňujeme, že možná budete potřebovat také LIMIT za určitých okolností.



  1. Nelze použít mysql_real_escape_string

  2. Mysql Seřaďte podle příjmení, když je celé jméno sloupce

  3. Simulace ORDER BY FIELD() MySQL v Postgresql

  4. Jak provést uloženou proceduru uvnitř výběrového dotazu