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.