Ho un database in sql server 2005 con tabelle molto
grandi, una dell'ordine di milioni di righe. Ieri per la quarta o quinta volta
una query che prima girava in tempi brevi ha iniziato a richiedere 2 minuti e
mezzo per l'esecuzione.
LA query in questione ha una join tra una tabella con 100 righe ed una con
200.000 righe, fa una join su due campi e naturalmente ho creato un indice per
evitare un table scan. Guardando il piano di esecuzione noto che la join viene
fatta con il loop. Normalmente il loop va bene per tabelle piccole ma per
tabelle con molte righe purtropo è lento. Ho controllato le statistiche, ma
nulla. Il risultato è che come in altri casi ho dovuto forzare l'algoritmo di
join con un
OPTION (HASH JOIN)
In questo modo forzo una join con un hashtable, appena fatta questa modifica
il tempo di esecuzione torna ad essere di 4 secondi. Questa stessa cosa mi
capita con altre tabelle e sempre quando ho join tra una tabella molto grande ed
una con molte meno righe, non capisco proprio cosa lo spinga a scegliere un
piano di esecuzione molto meno efficente.
Gian Maria.
powered by IMHO 1.3