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.