sql >> Database teknologi >  >> RDS >> Mysql

Brug af OR on WHERE-sætning i MySql forårsager langsom udførelse

Ja, OR er ofte en præstationsdræber. En almindelig løsning er at gøre UNION . For dit eksempel:

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

Hvis du er sikker på, at der ikke er dups, så skift til den hurtigere UNION ALL .

Hvis du ikke fisker efter manglende team_users rækker, brug JOIN i stedet for LEFT JOIN .

Hvis du har brug for ORDER BY , tilføj nogle forældre:

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

Ellers angives ORDER BY ville kun gælde for den anden SELECT . (Hvis du også har brug for 'paginering', se min blog .)

Bemærk, at du muligvis også har brug for LIMIT under visse omstændigheder.



  1. Hvordan giver man en unik begrænsning til en kombination af kolonner i Oracle?

  2. Tilføj manglende data fra forrige måned eller år kumulativt

  3. MySQL Forespørgsel om at vælge data fra sidste uge?

  4. Prisma, hvordan man rydder databasen