Perché questo priva l'ottimizzatore dell'opportunità di considerare altri metodi che possono essere più efficienti.
Quando la distribuzione dei dati (su cui l'ottimizzatore prende le sue decisioni) è fortemente sbilanciata e le statistiche non sono in grado di rappresentarla correttamente.
Questi sono algoritmi diversi.
-
LOOP
è nidificato loop:per ogni record della tabella esterna, la tabella interna viene cercata per corrispondenze (usando l'indice di disponibili). Più veloce quando solo una piccola parte dei record di entrambe le tabelle soddisfa ilJOIN
e ilWHERE
condizioni. -
MERGE
ordina entrambe le tabelle le attraversa nell'ordine di ordinamento, saltando i record non corrispondenti. Il più veloce per ilFULL JOIN
se entrambi i recordset sono già ordinati (da precedenti operazioni di ordinamento o quando viene utilizzato il percorso di accesso all'indice) -
HASH
crea una tabella hash nella memoria temporanea (memoria otempdb
) da una delle tabelle e ricerca ogni record dall'altra. Più veloce se la grande porzione di record di una delle due tabelle corrisponde aWHERE
eMERGE
condizione.