Je commence à apprendre les plans d'exécution et je ne comprends pas comment fonctionne exactement un match hash et pourquoi il serait utilisé dans une jointure simple:
select Posts.Title, Users.DisplayName
From Posts JOIN Users on
Posts.OwnerUserId = Users.Id
OPTION (MAXDOP 1)
Si je comprends bien, les résultats de l'analyse d'index supérieur deviennent la capacité de hachage et chaque ligne de l'analyse groupée d'index inférieure est recherchée. Je comprends très bien le fonctionnement des tables de hachage, mais je ne sais pas exactement quelles valeurs sont hachées dans un exemple comme celui-ci.
Qu'est-ce qui aurait du sens si le champ commun entre eux, l'identifiant, est haché - mais si c'est le cas, pourquoi hacher un nombre?
la source
OPTION (FAST n)
indice, où n est le nombre approximatif de lignes que vous attendez. Cela va polariser l'optimiseur vers des boucles imbriquées plutôt que des jointures de hachage lorsque n est faible. La raison en est que les jointures de hachage sont rapides pour les jointures volumineuses mais que leur coût de démarrage est élevé. Les boucles imbriquées coûtent cher par ligne, mais peuvent être lancées à très bas coût. C'est donc une question de réglage fin basé sur vos données réelles et votre modèle d'accès.De http://sqlinthewild.co.za/index.php/2007/12/30/execution-plan-operations-joins/
"La jointure par hachage est l’une des opérations les plus coûteuses, car elle nécessite la création d’une table de hachage. Cela dit, c’est la jointure qui convient le mieux aux entrées volumineuses non triées. C’est la plus gourmande en mémoire des jointures
La jointure de hachage lit d'abord l'une des entrées et hache la colonne de jointure et place le hachage résultant et les valeurs de la colonne dans une table de hachage construite en mémoire. Ensuite, il lit toutes les lignes de la deuxième entrée, les hache et les vérifie dans le compartiment de hachage résultant pour les lignes jointes. "
qui pointent vers ce post:
http://blogs.msdn.com/b/craigfr/archive/2006/08/10/687630.aspx
HTH
la source
L'avantage de hacher un champ numérique est que vous prenez une valeur plus grande et que vous la divisez en morceaux plus petits afin qu'il puisse s'intégrer dans une table de hachage.
Voici comment Grant Fritchey le décrit:
"Une table de hachage, en revanche, est une structure de données qui divise tous les éléments en catégories de taille égale, ou compartiments, pour permettre un accès rapide aux éléments. La fonction de hachage détermine le compartiment dans lequel se trouve un élément. Par exemple, , vous pouvez prendre une ligne dans une table, la hacher en une valeur de hachage, puis stocker la valeur de hachage dans une table de hachage. "
Vous pouvez également obtenir une copie gratuite de son ebook "Dissection des plans d'exécution de SQL Server" à partir d'un lien de l'article suivant:
Source: http://www.simple-talk.com/sql/performance/graphical-execution-plans-for-simple-sql-queries/
la source