Sim,
OR é frequentemente um assassino de desempenho. Uma solução comum é fazer UNION . Para o seu exemplo: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');
Se você tiver certeza de que não há dups, mude para o
UNION ALL mais rápido . Se você não está procurando por
team_users ausentes linhas, use JOIN em vez de LEFT JOIN . Se você precisar de
ORDER BY , adicione alguns parênteses:( SELECT ... )
UNION ...
( SELECT ... )
ORDER BY ...
Caso contrário, o
ORDER BY se aplicaria apenas ao segundo SELECT . (Se você também precisar de 'paginação', veja meu blog
.) Observe que você também pode precisar de
LIMIT em certas circunstâncias.