Ano, OR je často zabijákem výkonu. Běžným řešením je udělat UNION . Pro váš příklad:
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');
Pokud jste si jisti, že nedochází k dupsům, přejděte na rychlejší UNION ALL .
Pokud nelovíte chybějící team_users řádků, použijte JOIN místo LEFT JOIN .
Pokud potřebujete ORDER BY , přidejte nějaké závorky:
( SELECT ... )
UNION ...
( SELECT ... )
ORDER BY ...
V opačném případě ORDER BY by se vztahovalo pouze na druhý SELECT . (Pokud potřebujete také 'stránkování', podívejte se na můj blog
.)
Upozorňujeme, že možná budete potřebovat také LIMIT za určitých okolností.