Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Suggerimenti per il join di SQL SERVER 2008

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.

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

  2. MERGE ordina entrambe le tabelle le attraversa nell'ordine di ordinamento, saltando i record non corrispondenti. Il più veloce per il FULL JOIN se entrambi i recordset sono già ordinati (da precedenti operazioni di ordinamento o quando viene utilizzato il percorso di accesso all'indice)

  3. HASH crea una tabella hash nella memoria temporanea (memoria o tempdb ) da una delle tabelle e ricerca ogni record dall'altra. Più veloce se la grande porzione di record di una delle due tabelle corrisponde a WHERE e MERGE condizione.