Mysql
 sql >> Base de données >  >> RDS >> Mysql

Gauche JOIN plus rapide ou Inner Join plus rapide ?

Ça dépend; exécutez-les tous les deux pour le savoir; puis lancez une 'sélection d'explication' pour une explication.

La différence de performances réelle peut aller de "pratiquement inexistante" à "assez significative" selon le nombre de lignes dans A avec id='12345' qui n'ont pas d'enregistrements correspondants dans B et C.

Mettre à jour (basé sur les plans de requête publiés)

Lorsque vous utilisez INNER JOIN, peu importe (en termes de résultats, pas de performances) avec quelle table commencer, l'optimiseur essaie donc de choisir celle qui, selon lui, fonctionnerait le mieux. Il semble que vous ayez des index sur toutes les colonnes PK / FK appropriées et que vous n'ayez pas d'index sur friend_events.userid ou il y a trop d'enregistrements avec userid = '13006' et il n'est pas utilisé ; dans tous les cas, l'optimiseur choisit la table avec moins de lignes comme "base" - dans ce cas, c'est zcms_users .

Lorsque vous utilisez LEFT JOIN, cela fait importe (en termes de résultats) avec quelle table commencer ; donc friend_events est choisi. Maintenant pourquoi cela prend moins de temps de cette façon, je ne suis pas tout à fait sûr; Je devine friend_events.userid l'état aide. Si vous deviez ajouter un index (est-ce vraiment varchar, btw ? Pas numérique ?) À cela, votre INNER JOIN pourrait également se comporter différemment (et devenir plus rapide).