Os planos de execução gráfica do SQL Server são lidos da direita para a esquerda e de cima para baixo. Existe uma ordem significativa para a saída gerada por SET STATISTICS IO ON
?
A seguinte 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;
Gera este plano:
E esta STATISTICS IO
saída:
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.
Então, reitero: o que dá? Existe uma ordem significativa para a STATISTICS IO
saída ou alguma ordem arbitrária é usada?
fonte
Eu sempre pensei que tinha um pedido, quando eu fazia mais programação do que administração. Executei alguns planos de execução e verifiquei minhas crenças.
Aqui está o que eu vejo:
Em uma consulta de várias etapas (como muitos de nossos procedimentos armazenados), a ordem reflete a ordem física na qual as consultas são executadas.
Para uma consulta específica, parece que as estatísticas de veiculação refletem o plano de execução relatando estatísticas começando da direita e trabalhando à esquerda
Talvez isso seja mais uma observação do que qualquer outra coisa.
fonte
SELECT COUNT(*) FROM HumanResources.EmployeeDepartmentHistory UNION ALL SELECT COUNT(*) FROM HumanResources.Employee UNION ALL SELECT COUNT(*) FROM HumanResources.Department
também inverte aIO
saída, mas não explica por que a tabela de trabalho é relatada primeiro no exemplo da pergunta.Portanto, acho que os resultados das estatísticas io fornecem muito mais informações sobre o que realmente está acontecendo no tempo de execução, pois isso levará em consideração e será afetado pela necessidade de ler do disco em vez do cache, além de ser influenciado pelas permissões da conta em que a consulta está sendo executada. A posição da tabela no retorno estatístico é influenciada por outros fatores além daqueles considerados pelo criador de perfil.
Aqui está um artigo da kb que fornece informações e alguns exemplos: http://support.microsoft.com/kb/314648
fonte
STATISTICS IO
em geral. É puramente sobre a ordem em que as leituras das várias tabelas são relatadas. Não vejo nada sobre isso no seu link.