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.