Ja, OR
er ofte en præstationsdræber. En almindelig løsning er at gøre UNION
. For dit eksempel:
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');
Hvis du er sikker på, at der ikke er dups, så skift til den hurtigere UNION ALL
.
Hvis du ikke fisker efter manglende team_users
rækker, brug JOIN
i stedet for LEFT JOIN
.
Hvis du har brug for ORDER BY
, tilføj nogle forældre:
( SELECT ... )
UNION ...
( SELECT ... )
ORDER BY ...
Ellers angives ORDER BY
ville kun gælde for den anden SELECT
. (Hvis du også har brug for 'paginering', se min blog
.)
Bemærk, at du muligvis også har brug for LIMIT
under visse omstændigheder.