Maison >base de données >tutoriel mysql >Pourquoi mes LEFT JOIN sont-elles parfois plus rapides que les INNER JOIN dans SQL Server ?

Pourquoi mes LEFT JOIN sont-elles parfois plus rapides que les INNER JOIN dans SQL Server ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-18 16:37:10883parcourir

Why Are My LEFT JOINs Sometimes Faster Than INNER JOINs in SQL Server?

Performance des jointures SQL Server : démystifier le mythe LEFT JOIN

Il existe une idée fausse courante concernant les performances de jointure de SQL Server : selon laquelle les opérations LEFT JOIN sont intrinsèquement plus rapides que les opérations INNER JOIN. C’est généralement inexact. Les LEFT JOIN introduisent une surcharge de traitement supplémentaire car ils doivent effectuer tout le travail d'un INNER JOIN, puis ajouter des lignes avec des valeurs NULL pour les entrées sans correspondance dans le tableau de droite. L'ensemble de résultats plus large contribue également à augmenter le temps d'exécution.

Pourquoi votre LEFT JOIN aurait pu être plus rapide

Si vous avez observé une requête LEFT JOIN plus rapide, la raison vient probablement de facteurs sans rapport avec le type de jointure lui-même :

  • Indexation insuffisante : L'absence d'index appropriés sur les clés candidates et étrangères constitue un goulot d'étranglement majeur en termes de performances, en particulier lors de la jonction de nombreuses tables (par exemple, neuf tables sans index suffisants).
  • Petites tailles de tables : Lorsque les tables plus petites impliquées dans la jointure contiennent très peu de lignes, la surcharge du LEFT JOIN peut être négligeable par rapport au temps passé sur d'autres opérations de requête.

Quand LEFT JOINpourrait montrer un avantage

Le seul scénario dans lequel un LEFT JOIN pourrait surpasser un INNER JOIN est dans des conditions très spécifiques :

  • Tables extrêmement petites : Les tables impliquées ont un nombre de lignes exceptionnellement petit.
  • Manque d'index : La requête ne dispose pas d'index efficaces, ce qui rend la LEFT JOIN surcharge supplémentaire moins importante que les problèmes de performances liés à l'index.

Exemple illustratif

Considérez ces tableaux :

<code class="language-sql">CREATE TABLE #Test1 (ID int PRIMARY KEY, Name varchar(50) NOT NULL);
CREATE TABLE #Test2 (ID int PRIMARY KEY, Name varchar(50) NOT NULL);
INSERT INTO #Test1 VALUES (1, 'One'), (2, 'Two'), (3, 'Three');
INSERT INTO #Test2 VALUES (1, 'One'), (2, 'Two'), (3, 'Three');</code>

Une INNER JOIN requête :

<code class="language-sql">SELECT * FROM #Test1 t1 INNER JOIN #Test2 t2 ON t2.Name = t1.Name;</code>

Une LEFT JOIN requête :

<code class="language-sql">SELECT * FROM #Test1 t1 LEFT JOIN #Test2 t2 ON t2.Name = t1.Name;</code>

Dans cet exemple minimal, avec peu de lignes et aucun index, le LEFT JOIN peut apparaître plus rapidement. Cependant, si la condition de jointure utilisait la colonne ID (la clé primaire), le INNER JOIN serait considérablement plus rapide grâce à une utilisation efficace de l'index. Cela souligne l'importance d'une indexation appropriée pour optimiser les performances des jointures, quel que soit le type de jointure.

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