2009-06-17 8 views
5

Ho un piano di esecuzione per una abbastanza complesso join che mostra un indice di ricerca sia eseguita su un tavolo con il "numero effettivo di righe" lettura ~ 70.000, quando ci sono in realtà solo ~ 600 righe nella tabella in totale (il numero stimato di righe è solo 127).Piano SQL Execution mostra un "numero effettivo di righe" che è maggiore della dimensione della tabella

Nota che tutte le statistiche sono aggiornate ed i parametri di input per la query sono esattamente gli stessi parametri che sono stati inseriti quando il proc è stato compilato.

Perché è il numero effettivo di righe così in alto, e che cosa fa il numero "effettivo Numero di file" significa veramente?

La mia unica teoria è che un numero elevato di righe è correlato ai cicli nidificati e che questa ricerca dell'indice viene eseguita un numero di volte - il "Numero effettivo di righe" rappresenta davvero il numero totale di righe su tutte le esecuzioni . In questo caso, il numero stimato di righe significa anche il numero totale di righe su tutte le esecuzioni?

+1

Credo che la vostra ipotesi siano corrette – Avitus

risposta

9

ActualRows conta il numero di volte GetNext() è stato chiamato su un operatore fisico.

Si dovrebbe anche guardare il ActualRebinds, ActualRewinds and ActualEndOfScans per avere un'idea di quante volte il ciclo interno è stato rivalutato:

Un REBIND significa che uno o più dei parametri correlati del join modificato e il lato interno deve essere rivalutato. A rewind significa che nessuno dei parametri correlati modificato e il set di risultati interno precedente può essere riutilizzato.

3

il numero effettivo dei valori righe è il risultato di tutti i valori trasformati per tale nodo nel piano exec. quindi sì, prende in considerazione l'unione dei loop nidificati.