Die grafischen Ausführungspläne von SQL Server werden von rechts nach links und von oben nach unten gelesen. Gibt es eine sinnvolle Reihenfolge für die Ausgabe von SET STATISTICS IO ON
?
Die folgende Abfrage:
SET STATISTICS IO ON;
SELECT *
FROM Sales.SalesOrderHeader AS soh
JOIN Sales.SalesOrderDetail AS sod ON soh.SalesOrderID = sod.SalesOrderID
JOIN Production.Product AS p ON sod.ProductID = p.ProductID;
Erzeugt diesen Plan:
Und diese STATISTICS IO
Ausgabe:
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'SalesOrderDetail'. Scan count 1, logical reads 1246, physical reads 3, read-ahead reads 1277, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'SalesOrderHeader'. Scan count 1, logical reads 689, physical reads 1, read-ahead reads 685, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Product'. Scan count 1, logical reads 15, physical reads 1, read-ahead reads 14, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Also wiederhole ich: Was gibt es? Gibt es eine sinnvolle Reihenfolge für die STATISTICS IO
Ausgabe oder wird eine beliebige Reihenfolge verwendet?
quelle
Ich dachte immer, es hätte einen Auftrag, als ich mehr programmiert als administriert habe. Ich habe ein paar Hinrichtungspläne durchgesehen und meine Überzeugungen überprüft.
Folgendes sehe ich:
In einer mehrstufigen Abfrage (wie bei vielen unserer gespeicherten Prozeduren) spiegelt die Reihenfolge die physische Reihenfolge wider, in der die Abfragen ausgeführt werden.
Für eine bestimmte Abfrage sieht es so aus, als ob die Statistik-E / A den Ausführungsplan widerspiegeln, indem Statistiken beginnend von rechts nach links gemeldet werden
Vielleicht ist dies eher eine Beobachtung als irgendetwas anderes.
quelle
SELECT COUNT(*) FROM HumanResources.EmployeeDepartmentHistory UNION ALL SELECT COUNT(*) FROM HumanResources.Employee UNION ALL SELECT COUNT(*) FROM HumanResources.Department
kehrt auch dieIO
Ausgabe um, erklärt jedoch nicht, warum die Arbeitstabelle im Beispiel in der Frage zuerst gemeldet wird.Ich denke also, dass die Ergebnisse der Statistik viel mehr Aufschluss darüber geben, was zur Laufzeit tatsächlich passiert, da dies die Notwendigkeit berücksichtigt und beeinflusst, von der Festplatte anstatt vom Cache zu lesen, und auch von den Berechtigungen des Kontos beeinflusst wird dass die Abfrage unter ausgeführt wird. Die Position der Tabelle in der Statistikrendite wird dann von anderen Faktoren beeinflusst, als sie vom Profiler berücksichtigt werden.
Hier ist ein KB-Artikel, der Einblicke und einige Beispiele bietet: http://support.microsoft.com/kb/314648
quelle
STATISTICS IO
im Allgemeinen. Es geht lediglich um die Reihenfolge, in der die Lesevorgänge der verschiedenen Tabellen gemeldet werden. Ich sehe nichts darüber in Ihrem Link.