Графические планы выполнения SQL Server читаются справа налево и сверху вниз. Есть ли значимый порядок в выводе SET STATISTICS IO ON
?
Следующий запрос:
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;
Создает этот план:
И этот STATISTICS IO
вывод:
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.
Итак, повторюсь: что дает? Есть ли значимый порядок STATISTICS IO
вывода или какой-то произвольный порядок используется?
источник
Я всегда думал, что у него был заказ, когда я занимался больше программированием, чем администрированием. Я проверил несколько планов выполнения и дважды проверил свои убеждения.
Вот что я вижу:
В многошаговом запросе (например, во многих наших хранимых процедурах) порядок отражает физический порядок, в котором выполняются запросы.
Для конкретного запроса, похоже, статистика ввода-вывода отражает план выполнения, сообщая статистику, начиная с справа и работая слева
Возможно, это больше наблюдение, чем все остальное.
источник
SELECT COUNT(*) FROM HumanResources.EmployeeDepartmentHistory UNION ALL SELECT COUNT(*) FROM HumanResources.Employee UNION ALL SELECT COUNT(*) FROM HumanResources.Department
также меняетIO
вывод, но не объясняет, почему рабочая таблица сообщается первой в примере в вопросе.Поэтому я думаю, что результаты статистики дают гораздо больше информации о том, что на самом деле происходит во время выполнения, так как будут учитывать и будут зависеть от необходимости чтения с диска вместо кэша, а также будут зависеть от разрешений учетной записи. что запрос выполняется под. Положение таблицы в результатах статистики зависит от других факторов, которые не учитывались профилировщиком.
Вот статья в КБ, которая дает представление и несколько примеров: http://support.microsoft.com/kb/314648
источник
STATISTICS IO
вообще. Речь идет исключительно о порядке, в котором сообщается о чтениях различных таблиц. Я не вижу ничего об этом в вашей ссылке.