Ya, OR sering merupakan pembunuh kinerja. Solusi umum adalah melakukan UNION . Untuk contoh Anda:
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');
Jika Anda yakin tidak ada dups, ubah ke UNION ALL yang lebih cepat .
Jika Anda tidak mencari team_users missing yang hilang baris, gunakan JOIN alih-alih LEFT JOIN .
Jika Anda membutuhkan ORDER BY , tambahkan beberapa induk:
( SELECT ... )
UNION ...
( SELECT ... )
ORDER BY ...
Jika tidak, ORDER BY hanya akan berlaku untuk SELECT . kedua . (Jika Anda juga membutuhkan 'pagination', lihat blog saya
.)
Harap perhatikan bahwa Anda mungkin juga memerlukan LIMIT dalam keadaan tertentu.