はい、OR 多くの場合、パフォーマンスを低下させます。一般的な回避策は、UNIONを実行することです。 。あなたの例:
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');
重複がないことが確実な場合は、より高速なUNION ALLに変更してください 。
不足しているteam_usersを探していない場合 行、JOINを使用 LEFT JOINの代わりに 。
ORDER BYが必要な場合 、いくつかの親を追加します:
( SELECT ... )
UNION ...
( SELECT ... )
ORDER BY ...
それ以外の場合は、ORDER BY 2番目のSELECTにのみ適用されます 。 (「pagination」も必要な場合は、私のブログを参照してください。
。)
LIMITも必要になる場合があることに注意してください 特定の状況で。