Question

Je commence à apprendre les plans d'exécution et je suis confus sur la façon exactement fonctionne un match de hachage et pourquoi il serait utilisé dans un simple JOIN:

select Posts.Title, Users.DisplayName
From Posts JOIN Users on
Posts.OwnerUserId = Users.Id
OPTION (MAXDOP 1)

entrer image description ici

Si je comprends bien les résultats de l'index de balayage devenir le hachage capable et chaque ligne dans l'analyse CLUSTERED index en bas est recherché. Je comprends comment fonctionnent les tables de hachage à au moins un certain degré, mais je suis confus au sujet dont les valeurs se exactement dans un hachés par exemple comme celui-ci.

Qu'est-ce qui me faire sens est le champ commun entre eux, l'identifiant, est hachée - mais si tel est le cas, pourquoi hachage un certain nombre

?
Était-ce utile?

La solution

Comme les citations de réponse de SQLRockstar

  

mieux pour les grandes entrées non triées.

  • de l'analyse de l'indice de Users.DisplayName (supposé nonclustered) vous Users.Id (en supposant cluster) = Unsorted
  • Vous numérisez également les messages pour OwnerUserId = Unsorted

Ceci est 2 entrées désordonnées.

Je considérerais un index sur la table messages sur OwnerUserId, y compris le titre. Cela va ajouter un peu d'ordre sur un côté de l'entrée du REJOIGNEZ + il sera indice couvrant

CREATE INDEX IX_OwnerUserId ON Posts (OwnerUserId) INCLUDE (Title)

Vous pouvez alors constater que l'indice de Users.DisplayName ne sera pas utilisé et il va scanner le PK à la place.

Autres conseils

De http://sqlinthewild.co.za/index php / 2007/12/30 / exécution-plan-opérations de joint /

"La jointure de hachage est l'un des plus chers des opérations de jointure, car elle nécessite la création d'une table de hachage pour faire la jonction. Cela dit, il est la jointure qui est le mieux pour les grandes entrées non triées. Il est le plus mémoire- intensive de l'une des jointures

Le jointure de hachage lit d'abord l'une des entrées et la colonne de jointure hash et met le hachage résultante et les valeurs de colonne dans une table de hachage construit en mémoire. Ensuite, il lit toutes les lignes de la deuxième entrée, hash ceux-ci et vérifie les lignes dans le seau de hachage pour les lignes d'assemblage. "

qui des liens vers ce message:

http://blogs.msdn.com/b/craigfr/archive /2006/08/10/687630.aspx

HTH

L'avantage de hachant un champ numérique est que vous prenez une plus grande valeur et le casser en petits morceaux afin qu'il puisse entrer dans une table de hachage.

Voici comment Grant Fritchey décrit:

"Une table de hachage, d'autre part, est une structure de données qui divise tous les éléments en catégories de taille égale, ou des seaux, pour permettre un accès rapide aux éléments. Les détermine la fonction de hachage qui Bucket un élément va dans . Par exemple, vous pouvez prendre une ligne d'une table, hachage dans une valeur de hachage, puis stocker la valeur de hachage dans une table de hachage. "

Vous pouvez aussi obtenir une copie gratuite de son ebook « Dissection Plans d'exécution 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/

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top