Maison >base de données >tutoriel mysql >Pourquoi mes LEFT JOIN sont-elles parfois plus rapides que les INNER JOIN dans 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 :
LEFT JOIN
peut être négligeable par rapport au temps passé sur d'autres opérations de requête.Quand LEFT JOIN
pourrait 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 :
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!