Domanda

Sto iniziando a imparare piani di esecuzione e sono confuso su come esattamente un Hash Match funziona e perché potrebbe essere utilizzato in modo semplice unisco:

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

entrare descrizione dell'immagine qui

A quanto mi risulta i risultati dell'indice Top Scan diventare l'hash in grado e ogni riga nell'Indice fondo cluster scansione viene cercato. Capisco come tabelle hash di lavoro per almeno un certo grado, ma sono confuso su quali valori vengono esattamente hash in un esempio come questo.

Che avrebbe senso me è il campo comune tra loro, l'id, viene assegnata - ma se questo è il caso, perché un certo numero di hash

?
È stato utile?

Soluzione

La risposta di citazioni Come SQLRockstar

migliore per i grandi, gli ingressi non ordinati.

Ora,

  • dal indice di scansione Users.DisplayName (assunto cluster) si ottiene Users.Id (supponendo cluster) = non ordinata
  • Si sono anche la scansione di messaggi per OwnerUserId = indifferenziati

Questa è 2 ingressi ordinati.

Lo considererei un indice sulla tabella di messaggi su OwnerUserId, compreso il titolo. Questo aggiungerà un ordine su un lato dell'ingresso al join + sarà indice di copertura

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

E 'possibile quindi trovare che l'indice Users.DisplayName non sarà utilizzato e sarà la scansione del PK, invece.

Altri suggerimenti

http://sqlinthewild.co.za/index .php / 2007/12/30 / esecuzione-plan-operazioni-join /

"L'hash join è uno dei più costosi operazioni di aderire, in quanto richiede la creazione di una tabella di hash per fare il join. Detto questo, è l'unione che è meglio per i grandi, gli ingressi non ordinati. E 'il più Memory intensivo di qualsiasi dei join

Il join hash prima legge uno degli ingressi e gli hash il join colonna e mette l'hash risultante e i valori di colonna in una tabella hash costruito in memoria. Poi legge tutte le righe del secondo ingresso, hash quelli e controlli le righe nel secchio di hash risultante per le righe che uniscono ".

che link a questo post:

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

HTH

Il vantaggio di hashing un campo numerico è che si sta prendendo un valore più grande e scomponendola in pezzi più piccoli in modo che possa inserirsi in una tabella di hash.

Ecco come Concessione Fritchey lo descrive:

"Una tabella hash, d'altra parte, è una struttura di dati che divide tutti gli elementi in uguali dimensioni categorie o secchi, per consentire un rapido accesso agli elementi. I determina la funzione di hashing che secchio un elemento va in . Per esempio, si può prendere una riga da una tabella, hash in un valore di hash, quindi memorizzare il valore hash in una tabella hash. "

Si può anche ottenere una copia gratuita del suo ebook "dei piani di esecuzione di dissezione di SQL Server" da un collegamento dal seguente articolo:

Fonte: http: //www.simple- talk.com/sql/performance/graphical-execution-plans-for-simple-sql-queries/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top