Differenza tra join Hash, Merge e Loop?


40

In SQL Server è possibile specificare i suggerimenti per il join:

  • HASH JOIN
  • MERGE JOIN
  • LOOP JOIN

Qual è la definizione di questi tre suggerimenti per i join e quando dovrebbero essere usati ciascuno?

Risposte:


37

Da MSDN, nell'argomento Concetti di ottimizzazione delle query avanzate :

SQL Server utilizza tre tipi di operazioni di join:

  • Unisci loop annidati

  • Unisci join

  • Hash si unisce

Se un input di join è piccolo (meno di 10 righe) e l'altro input di join è abbastanza grande e indicizzato sulle sue colonne di join, un join di cicli annidati indice è l'operazione di join più veloce perché richiedono il minimo I / O e il minor numero di confronti. Per ulteriori informazioni sui loop nidificati, vedere Informazioni sui join di loop nidificati.

Se i due input di join non sono piccoli ma vengono ordinati sulla loro colonna di join (ad esempio, se sono stati ottenuti scansionando gli indici ordinati), un join di unione è l'operazione di join più veloce. Se entrambi gli input di join sono di grandi dimensioni e i due input hanno dimensioni simili, un join di unione con l'ordinamento precedente e un join di hash offrono prestazioni simili. Tuttavia, le operazioni di hash join sono spesso molto più veloci se le due dimensioni di input differiscono significativamente l'una dall'altra. Per ulteriori informazioni, vedere Informazioni su Unisci join.

I join hash possono elaborare in modo efficiente input di grandi dimensioni, non ordinati e non indicizzati.

Ma credo che dovresti iniziare con un argomento di base: Ottimizzazione delle query e infine utilizzare i suggerimenti per le query.


5
D'accordo, inserire un suggerimento di join dovrebbe essere lasciato solo come ultima risorsa (a volte utile se i dati stimati sono significativamente diversi dai dati effettivi).
Andrew Bickerton,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.