Graficzne plany wykonania programu SQL Server odczytują od prawej do lewej i od góry do dołu. Czy generowana przez jest znacząca kolejność SET STATISTICS IO ON
?
Następujące zapytanie:
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;
Generuje ten plan:
I ta STATISTICS IO
wydajność:
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.
Powtarzam: co daje? Czy istnieje sensowne uporządkowanie danych STATISTICS IO
wyjściowych lub czy użyto jakiegoś arbitralnego porządku?
źródło
Zawsze myślałem, że ma rozkaz, od samego początku, kiedy robiłem więcej programowania niż administracji. Przejrzałem kilka planów wykonania i dwukrotnie sprawdziłem swoje przekonania.
Oto co widzę:
W zapytaniu wieloetapowym (takim jak wiele naszych procedur przechowywanych) kolejność odzwierciedla fizyczną kolejność uruchamiania zapytań.
W przypadku konkretnego zapytania wygląda na to, że statystyki we / wy odzwierciedlają plan wykonania, raportując statystyki zaczynające się od prawej i pracujące po lewej
Być może jest to bardziej spostrzeżenie niż cokolwiek innego.
źródło
SELECT COUNT(*) FROM HumanResources.EmployeeDepartmentHistory UNION ALL SELECT COUNT(*) FROM HumanResources.Employee UNION ALL SELECT COUNT(*) FROM HumanResources.Department
również odwraca daneIO
wyjściowe, ale nie wyjaśnia, dlaczego tabela robocza jest zgłaszana jako pierwsza w przykładzie w pytaniu.Myślę więc, że wyniki statystyk io dają znacznie lepszy wgląd w to, co faktycznie dzieje się w środowisku wykonawczym, ponieważ weźmie ono pod uwagę i będzie miało na nie wpływ potrzeba odczytu z dysku zamiast z pamięci podręcznej, a także pod wpływem uprawnień konta pod którym uruchomione jest zapytanie. Na pozycję tabeli w statystykach wpływają wówczas inne czynniki niż te brane pod uwagę przez profilera.
Oto artykuł KB, który daje wgląd i kilka przykładów: http://support.microsoft.com/kb/314648
źródło
STATISTICS IO
ogólnie wyników. Chodzi wyłącznie o kolejność zgłaszania odczytów różnych tabel. Nie widzę nic na ten temat w twoim linku.