Maison >base de données >tutoriel mysql >Quand un LEFT JOIN est-il préférable à un INNER JOIN dans SQL Server, et pourquoi ?
SQL Server : performances INNER JOIN vs. LEFT JOIN – Une plongée plus approfondie
Une idée fausse courante dans SQL Server est que LEFT JOIN
surpasse toujours INNER JOIN
. Ce n'est pas nécessairement vrai. Le type de jointure optimal dépend fortement des caractéristiques spécifiques de la requête et des données. Examinons les différences.
Un INNER JOIN
renvoie uniquement les lignes correspondantes de toutes les tables jointes. Un LEFT JOIN
renvoie toutes les lignes du tableau de gauche et les lignes correspondantes du tableau de droite. S'il n'y a pas de correspondance à droite, les NULL
valeurs remplissent les colonnes correspondantes.
L'exemple de requête, impliquant neuf tables jointes à l'aide de INNER JOIN
, a probablement souffert de problèmes de performances en raison des analyses de tables approfondies requises. Le passage à LEFT JOIN
dans certains cas peut améliorer les performances en réduisant le nombre d'analyses, car il ne filtre pas les lignes manquant de correspondances dans les tableaux suivants.
Cependant, LEFT JOIN
n'est pas intrinsèquement plus rapide. Cela consomme souvent plus de ressources pour gérer l’inclusion de lignes sans correspondance. Généralement, INNER JOIN
est préféré pour les correspondances exactes, tandis que LEFT JOIN
est mieux adapté lorsque vous avez besoin de toutes les lignes de la table de gauche, quelles que soient les correspondances de la table de droite.
Optimisation des performances des requêtes :
Pour améliorer les performances, concentrez-vous sur ces domaines clés :
Indexation : Le schéma fourni met en évidence un problème crucial : les tables a
et b
manquent de clés primaires ou étrangères. Cela entrave considérablement l’efficacité des recherches de lignes. L'ajout d'index aux colonnes impliquées dans les conditions de jointure (par exemple, CompanyCd
, SPRNo
, SuffixNo
, dnno
, ProductSalesCd
, etc.) améliorera considérablement les performances, même avec LEFT JOIN
.
Analyse de schéma : Examinez attentivement les relations entre les tables. Les jointures inutiles augmentent la surcharge de traitement. Assurez-vous que vos jointures sont logiquement solides et minimisez les opérations redondantes.
Sélection du type de jointure : Choisissez le type de jointure qui reflète précisément vos besoins de récupération de données. Ne présumez pas arbitrairement que LEFT JOIN
est plus rapide.
Suggestions d'analyse et d'optimisation de schéma :
L'extrait de schéma fourni :
<code class="language-sql">FROM sidisaleshdrmly a -- NOT HAVE PK AND FK LEFT JOIN sidisalesdetmly b -- THIS TABLE ALSO HAVE NO PK AND FK ON a.CompanyCd = b.CompanyCd AND a.SPRNo = b.SPRNo AND a.SuffixNo = b.SuffixNo AND a.dnno = b.dnno -- ... (rest of the joins)</code>
Indique clairement la nécessité de clés primaires et étrangères dans les tables a
et b
, établissant des relations claires entre les tables. L'ajout de ces clés et index appropriés améliorera considérablement les performances des requêtes, que vous utilisiez INNER JOIN
ou LEFT JOIN
.
Conclusion :
Bien que LEFT JOIN
puisse parfois apporter des avantages en termes de performances, il est essentiel de comprendre ses implications et de l'utiliser de manière appropriée. Une analyse approfondie du schéma, une indexation appropriée et une sélection minutieuse des types de jointure sont essentielles pour des performances optimales des requêtes SQL Server. Ne vous fiez pas à des hypothèses ; analyser vos besoins spécifiques et optimiser en conséquence.
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!