Ja, OR ist häufig ein Performance-Killer. Eine gängige Problemumgehung besteht darin, UNION auszuführen . Für Ihr Beispiel:
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');
Wenn Sie sicher sind, dass es keine Dups gibt, wechseln Sie zum schnelleren UNION ALL .
Wenn Sie nicht nach fehlenden team_users fischen Zeilen verwenden Sie JOIN statt LEFT JOIN .
Wenn Sie ORDER BY benötigen , fügen Sie einige Klammern hinzu:
( SELECT ... )
UNION ...
( SELECT ... )
ORDER BY ...
Ansonsten ORDER BY würde nur für das zweite SELECT gelten . (Wenn Sie auch „Paginierung“ benötigen, siehe mein Blog
.)
Bitte beachten Sie, dass Sie möglicherweise auch LIMIT benötigen unter bestimmten Umständen.