Différence entre jointure de hachage, fusion et boucle?


40

Dans SQL Server, vous pouvez spécifier les indicateurs de jointure:

  • HASH JOIN
  • MERGE JOIN
  • LOOP JOIN

Quelle est la définition de ces trois indications de jointure et quand faut-il les utiliser?

Réponses:


37

À partir de MSDN, dans la rubrique Concepts avancés de réglage de la requête :

SQL Server utilise trois types d'opérations de jointure:

  • Jointures de boucles imbriquées

  • Fusionner les jointures

  • Hash rejoint

Si une entrée de jointure est petite (moins de 10 lignes) et que l'autre entrée de jointure est assez grande et indexée sur ses colonnes de jointure, une jointure à boucles imbriquées d'index est l'opération de jointure la plus rapide car elle requiert le moins d'entrées / sorties et le moins de comparaisons possibles. Pour plus d'informations sur les boucles imbriquées, voir Présentation des jointures de boucles imbriquées.

Si les deux entrées de jointure ne sont pas petites mais sont triées sur leur colonne de jointure (par exemple, si elles ont été obtenues en analysant les index triés), une jointure de fusion est l'opération de jointure la plus rapide. Si les deux entrées de jointure sont volumineuses et de taille similaire, une jointure de fusion avec un tri antérieur et une jointure de hachage offrent des performances similaires. Toutefois, les opérations de jointure par hachage sont souvent beaucoup plus rapides si les deux tailles d’entrée diffèrent de manière significative. Pour plus d'informations, voir Présentation des jointures de fusion.

Les jointures par hachage peuvent traiter efficacement des entrées volumineuses, non triées et non indexées.

Mais je pense que vous devriez commencer par un sujet plus fondamental: Paramétrage de la requête et, enfin, utiliser les indicateurs de requête.


5
D'accord, l'insertion d'une indication de jointure ne devrait être laissée qu'en dernier recours (parfois utile si les données estimées diffèrent de manière significative des données réelles).
Andrew Bickerton
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.