SQL Server 2008 JOIN suggerimenti
-
20-09-2019 - |
Domanda
Recentemente, stavo cercando di ottimizzare la query
UPDATE Analytics
SET UserID = x.UserID
FROM Analytics z
INNER JOIN UserDetail x ON x.UserGUID = z.UserGUID
di esecuzione stimato piano di esposizione 57% sulla Tabella di aggiornamento e il 40% su un Hash Match (aggregato). Ho fatto qualche snooping intorno ed ho trovato il tema del JOIN suggerimenti. Così ho aggiunto un suggerimento LOOP al mio interno aderire e WA-Zham! Il nuovo piano di esecuzione mostra 38% sulla Tabella di aggiornamento e il 58% su un indice di ricerca.
Quindi ero sul punto di iniziare ad applicare LOOP suggerimenti per tutte le mie domande fino a quando la prudenza ha avuto la meglio di me. Dopo un po 'googling, mi sono reso conto che uniscono i suggerimenti non sono molto ben coperti in BOL . Quindi ...
- Qualcuno può dirmi perché l'applicazione di LOOP allude a tutte le mie domande è una cattiva idea. Ho letto da qualche parte che un JOIN LOOP è predefinita metodo per la ricerca ottimizzatore JOIN, ma non ha potuto verificare la validità della dichiarazione?
- Quando vengono utilizzati JOIN suggerimenti? Quando il sh * t colpisce i busters ventilatore e fantasma non è in città?
- Qual è la differenza tra LOOP, hash e unire suggerimenti? BOL afferma che si fondono sembra essere il più lento, ma ciò che è l'applicazione di ogni suggerimento?
Grazie per il vostro tempo e aiutare le persone!
Sono in esecuzione SQL Server 2008 BTW. Le statistiche di cui sopra sono stimati piani di esecuzione.
Soluzione
Qualcuno può dirmi perché l'applicazione di LOOP allude a tutte le mie domande è una cattiva idea. Ho letto da qualche parte che un JOIN LOOP è predefinita metodo per la ricerca ottimizzatore ENTRA ma non ha potuto verificare la validità della dichiarazione?
Perché questo deruba l'ottimizzatore della possibilità di prendere in considerazione altri metodi che possono essere più efficiente.
Quando vengono utilizzati JOIN suggerimenti? Quando il sh * t colpisce i busters ventilatore e fantasma non è in città?
Quando la distribuzione dei dati (sui quali l'ottimizzatore rende le sue decisioni) è gravemente distorta e le statistiche non sono in grado di rappresentare in modo corretto.
Qual è la differenza tra LOOP, hash e unire suggerimenti? BOL afferma che si fondono sembra essere il più lento, ma ciò che è l'applicazione di ogni suggerimento?
Si tratta di algoritmi diversi.
-
LOOP
è cicli annidati: per ogni record dalla tabella esterna, la tabella interna viene cercato per le partite (utilizzando l'indice della disposizione). Il più veloce, quando solo una piccola porzione di record da entrambe le tabelle soddisfare laJOIN
e le condizioniWHERE
. -
tipi
MERGE
entrambe le tabelle sono le traverse in ordinamento, saltando i record non corrispondenti. Veloce per leFULL JOIN
s e quando entrambi recordset sono già ordinati (da operazioni di ordinamento precedente o quando viene utilizzato il percorso di accesso index) -
HASH
costruire una tabella hash nella memoria temporanea (memoria otempdb
) da uno dei tavoli e cerca per ogni record da l'altra. Il più veloce se la gran parte dei record sia da tavolo corrisponde la condizioneWHERE
eJOIN
.
Altri suggerimenti
L'esecuzione stimato piano di esposizione 57% sulla Tabella di aggiornamento e il 40% su un hash Match (aggregato). Ho fatto qualche snooping intorno e mi sono imbattuto il tema della JOIN suggerimenti. Così ho aggiunto un suggerimento per LOOP la mia inner join e WA-Zham! Il nuovo piano di esecuzione mostra 38% sulla Tabella Aggiornamento e il 58% su un indice di ricerca.
Sicuramente questo significa che il vostro piano proposto è peggio? Se l'aggiornamento tabella tiene una costante di tempo che è ora fuori costata dall'attività indice.