sql >> Database >  >> RDS >> Mysql

Het gebruik van OR op WHERE-instructie in MySql veroorzaakt trage uitvoering

Ja, OR is vaak een prestatie-killer. Een veelvoorkomende oplossing is om UNION . te doen . Voor jouw voorbeeld:

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');

Als je zeker weet dat er geen dups zijn, verander dan naar de snellere UNION ALL .

Als je niet op zoek bent naar ontbrekende team_users rijen, gebruik JOIN in plaats van LEFT JOIN .

Als u ORDER BY nodig heeft , voeg enkele haakjes toe:

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

Anders, de ORDER BY zou alleen van toepassing zijn op de tweede SELECT . (Als je ook 'paginering' nodig hebt, zie mijn blog .)

Houd er rekening mee dat u mogelijk ook LIMIT . nodig heeft in bepaalde omstandigheden.



  1. Lopend totaal berekenen in MySQL

  2. psql:kan geen verbinding maken met de server:geen bestand of map (Mac OS X)

  3. Wat is een databank? Definitie, typen en componenten

  4. Help ons de IDE te moderniseren in MS Access - uw stem telt!