はい、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
も必要になる場合があることに注意してください 特定の状況で。