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.