2009-06-17 8 views
5

Ich habe einen Ausführungsplan für eine ziemlich komplexe Join, die eine Indexsuche für eine Tabelle mit der "Tatsächliche Anzahl der Zeilen" Lesung durchgeführt wird ~ 70.000, wenn in der Tabelle insgesamt nur ~ 600 Zeilen vorhanden sind (die geschätzte Anzahl der Zeilen beträgt nur 127).SQL Execution Plan zeigt eine "tatsächliche Anzahl von Zeilen", die größer ist als die Tabellengröße

Beachten Sie, dass alle Statistiken auf dem neuesten Stand sind und die Eingabeparameter für die Abfrage genau dieselben sind wie die Parameter, die beim Kompilieren des Procs eingegeben wurden.

Warum ist die tatsächliche Anzahl der Zeilen so hoch, und was bedeutet die Zahl "Tatsächliche Anzahl der Zeilen" wirklich?

Meine einzige Theorie ist, dass eine hohe Anzahl von Zeilen mit den verschachtelten Schleifen verwandt wird, und dass diese Indexsuche mehrmals ausgeführt wird - die "tatsächliche Anzahl der Zeilen" stellt wirklich die Gesamtzahl der Zeilen über alle Ausführungen . Wenn dies der Fall ist, ist die geschätzte Anzahl der Zeilen auch die Gesamtzahl der Zeilen über alle Ausführungen hinweg?

+1

Ich glaube, dass Ihre Annahmen richtig sind – Avitus

Antwort

9

ActualRows zählt die Anzahl GetNext() wurde auf einem physischen Operator aufgerufen.

Sie sollten auch die ActualRebinds, ActualRewinds and ActualEndOfScans Blick auf eine Vorstellung zu bekommen, wie oft die innere Schleife wurde neu bewertet:

A rebind bedeutet, dass eine oder mehrere der korrelierte Parameter der Verbindung geändert und die Innenseite muss neu bewertet werden. A Zurückspulen bedeutet, dass keine der korrelierten Parameter geändert und die vorherige innere Ergebnismenge kann wiederverwendet werden.

3

Die tatsächliche Anzahl an Zeilenwerten ist das Ergebnis aller verarbeiteten Werte für diesen Knoten im Ausführungsplan. also ja, es berücksichtigt die Nested Loops Join.

Verwandte Themen