执行计划从何而来?


Answers:


9

SQL Server 2012在计划本身中有一个指示符RetrievedFromCache,可以为“ true”或“ false”。

这似乎是您要询问的财产。

这是一个示例(最后一行显示了属性):

<StmtSimple StatementCompId="1" StatementEstRows="1" StatementId="1" 
StatementOptmLevel="FULL" StatementOptmEarlyAbortReason="GoodEnoughPlanFound" 
StatementSubTreeCost="0.0508992" StatementText="SELECT COUNT(*) 
&#xD;&#xA;FROM sys.tables" StatementType="SELECT" 
QueryHash="0x9A4B63A948B30EA0" QueryPlanHash="0xF357CAE882D5B15D" 
RetrievedFromCache="true">

不幸的是,我在SQL Server 2008 R2生成的计划中没有看到任何类似的东西。

在SQL Server 2008 R2中,可以使用sys.dm_exec_query_stats系统DMV检查creation_time列中具有相同query_hash值的计划。可以从计划XML的标题中获取查询哈希(请参见上面的示例)。该查询将返回有关上述计划的行:

SELECT *
FROM sys.dm_exec_query_stats qs
WHERE qs.query_hash = 0x9A4B63A948B30EA0;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.