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 ...

  1. 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?
  2. Quando vengono utilizzati JOIN suggerimenti? Quando il sh * t colpisce i busters ventilatore e fantasma non è in città?
  3. 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.

È stato utile?

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.

  1. 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 la JOIN e le condizioni WHERE.

  2. tipi MERGE entrambe le tabelle sono le traverse in ordinamento, saltando i record non corrispondenti. Veloce per le FULL JOINs e quando entrambi recordset sono già ordinati (da operazioni di ordinamento precedente o quando viene utilizzato il percorso di accesso index)

  3. HASH costruire una tabella hash nella memoria temporanea (memoria o tempdb) 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 condizione WHERE e JOIN.

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top