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 IO
salida:
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 IO
salida 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.Department
también invierte elIO
resultado, 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 IO
en general. Se trata únicamente del orden en que se informan las lecturas de las distintas tablas. No veo nada sobre esto en su enlace.