Los planes de ejecución gráfica de SQL Server se leen de derecha a izquierda y de arriba a abajo. ¿Hay un orden significativo para la salida generada por SET STATISTICS IO ON?
La siguiente consulta:
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;
Genera este plan:

Y esta STATISTICS IOsalida:
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.
Entonces, reitero: ¿qué da? ¿Existe un orden significativo para la STATISTICS IOsalida o se utiliza algún orden arbitrario?
fuente

Siempre pensé que tenía una orden, desde cuando hacía más programación que administración. Revisé algunos planes de ejecución y verifiqué mis creencias.
Aquí está lo que veo:
En una consulta de varios pasos (como muchos de nuestros procedimientos almacenados) el orden refleja el orden físico en el que se ejecutan las consultas.
Para una consulta en particular, parece que las estadísticas IO reflejan el plan de ejecución al informar estadísticas que comienzan desde la derecha y trabajan hacia la izquierda
Quizás esto sea más una observación que otra cosa.
fuente
SELECT COUNT(*) FROM HumanResources.EmployeeDepartmentHistory UNION ALL SELECT COUNT(*) FROM HumanResources.Employee UNION ALL SELECT COUNT(*) FROM HumanResources.Departmenttambién invierte elIOresultado, pero no explica por qué la tabla de trabajo se informa primero en el ejemplo de la pregunta.Por lo tanto, creo que los resultados de las estadísticas dan mucha más información sobre lo que realmente está sucediendo en tiempo de ejecución, ya que tendrá en cuenta y se verá afectado por la necesidad de leer desde el disco en lugar de la memoria caché, y también se verá influenciado por los permisos de la cuenta bajo el cual se ejecuta la consulta. La posición de la tabla en el retorno estadístico está influenciada por otros factores distintos a los considerados por el generador de perfiles.
Aquí hay un artículo de kb que ofrece información y algunos ejemplos: http://support.microsoft.com/kb/314648
fuente
STATISTICS IOen general. Se trata únicamente del orden en que se informan las lecturas de las distintas tablas. No veo nada sobre esto en su enlace.