Maison >base de données >tutoriel mysql >Quand une LEFT JOIN surpasse-t-elle une INNER JOIN ?
LEFT JOIN vs INNER JOIN : un paradoxe de performance
C'est une hypothèse courante selon laquelle les opérations INNER JOIN
sont plus efficaces que LEFT JOIN
dans SQL Server. Cependant, les performances peuvent être étonnamment contre-intuitives. Cet article explore un scénario dans lequel un LEFT JOIN
a largement surperformé un INNER JOIN
.
L'étude de cas :
Une requête complexe impliquant neuf tables, utilisant initialement INNER JOIN
, a présenté des performances médiocres. Le passage à LEFT JOIN
a considérablement amélioré la vitesse d'exécution.
Pourquoi cette augmentation de vitesse inattendue ?
La sagesse conventionnelle est vraie : LEFT JOIN
n'est généralement pas plus rapide. Cela implique le même INNER JOIN
traitement, plus l'étape supplémentaire consistant à ajouter des valeurs nulles pour les lignes sans correspondance du tableau de gauche. L'ensemble de résultats plus large peut également ralentir les choses.
La clé pour comprendre la différence de performances observée réside dans l'absence d'index de clés primaires et étrangères sur les tables impliquées. Ce manque d'indexation a gravement nui à l'efficacité du INNER JOIN
.
Situations où LEFT JOIN pourrait gagner :
Bien que ce ne soit pas la norme, il existe des conditions spécifiques dans lesquelles un LEFT JOIN
pourrait surpasser un INNER JOIN
:
Petites tables : Avec des tables extrêmement petites (moins de dix lignes), la surcharge des INNER JOIN
opérations basées sur le hachage peut dépasser la surcharge des boucles imbriquées généralement utilisées dans les LEFT JOIN
plans d'exécution.
Indexation insuffisante : Si les index sont manquants ou inadéquats pour le INNER JOIN
, SQL Server peut choisir un plan d'exécution moins efficace. Un LEFT JOIN
exploitant les boucles imbriquées pourrait alors offrir de meilleures performances.
En résumé :
Bien que LEFT JOIN
nécessite intrinsèquement plus de traitement que INNER JOIN
, des situations impliquant de petites tables ou un manque d'indexation appropriée peuvent conduire à des avantages de performances inattendus pour LEFT JOIN
. L'absence d'index appropriés était probablement la cause de l'étude de cas décrite ci-dessus.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!