Les plans d'exécution graphique de SQL Server se lisent de droite à gauche et de haut en bas. Existe-t-il un ordre significatif pour la sortie générée par SET STATISTICS IO ON
?
La requête suivante:
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;
Génère ce plan:
Et cette STATISTICS IO
sortie:
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.
Alors, je réitère: qu'est-ce qui donne? Existe-t-il un ordre significatif de STATISTICS IO
sortie ou un ordre arbitraire est-il utilisé?
la source
J'ai toujours pensé qu'il y avait une commande, depuis l'époque où je faisais plus de programmation que d'administration. J'ai parcouru quelques plans d'exécution et revérifié mes croyances.
Voici ce que je vois:
Dans une requête en plusieurs étapes (comme beaucoup de nos procédures stockées), l'ordre reflète l'ordre physique dans lequel les requêtes sont exécutées.
Pour une requête particulière, il semble que les statistiques d'E / S reflètent le plan d'exécution en rapportant les statistiques en commençant par la droite et en travaillant vers la gauche
C'est peut-être plus une observation qu'autre chose.
la source
SELECT COUNT(*) FROM HumanResources.EmployeeDepartmentHistory UNION ALL SELECT COUNT(*) FROM HumanResources.Employee UNION ALL SELECT COUNT(*) FROM HumanResources.Department
inverse également laIO
sortie, mais cela n'explique pas pourquoi la table de travail est indiquée en premier dans l'exemple de la question.Je pense donc que les résultats des statistiques io donnent beaucoup plus d'informations sur ce qui se passe réellement à l'exécution, car ils prendront en compte et seront affectés par la nécessité de lire à partir du disque au lieu du cache, et seront également influencés par les autorisations du compte sous lequel la requête est exécutée. La position du tableau dans le retour des statistiques est alors influencée par d'autres facteurs que ceux pris en compte par le profileur.
Voici un article de kb qui donne un aperçu et quelques exemples: http://support.microsoft.com/kb/314648
la source
STATISTICS IO
en général. Il s'agit uniquement de l'ordre dans lequel les lectures des différentes tables sont reportées. Je ne vois rien à ce sujet dans votre lien.