Maison >base de données >tutoriel mysql >Quand une LEFT JOIN surpasse-t-elle une INNER JOIN ?

Quand une LEFT JOIN surpasse-t-elle une INNER JOIN ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-18 16:42:12877parcourir

When Does a LEFT JOIN Outperform an 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 :

  1. 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.

  2. 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn