sql >> Base de Datos >  >> RDS >> Mysql

El uso de OR en la declaración WHERE en MySql provoca una ejecución lenta

Sí, OR es frecuentemente un asesino del rendimiento. Una solución común es hacer UNION . Para tu ejemplo:

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

Si está seguro de que no hay duplicados, cambie al UNION ALL más rápido .

Si no está buscando team_users perdidos filas, use JOIN en lugar de LEFT JOIN .

Si necesita ORDER BY , agrega algunos paréntesis:

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

De lo contrario, el ORDER BY se aplicaría solo al segundo SELECT . (Si también necesita 'paginación', consulte mi blog .)

Tenga en cuenta que es posible que también necesite LIMIT en determinadas circunstancias.