【问题标题】:What does SQL Server execution plan show?SQL Server 执行计划显示什么?
【发布时间】:2010-06-03 17:22:10
【问题描述】:

有如下代码:

declare @XmlData xml =
'<Locations>
<Location rid="1"/>
</Locations>'

declare @LocationList table (RID char(32));
insert into @LocationList(RID)
select Location.RID.value('@rid','CHAR(32)') 
from @XmlData.nodes('/Locations/Location') Location(RID)

insert into @LocationList(RID)
select A2RID from tblCdbA2

表 tblCdbA2 有 172810 行。

我已在 SSMS 中使用“包括实际执行计划”执行批处理,并让 Profiler 运行。

计划显示第一次查询相对于批次的成本为 88%,第二次为 12%,但分析器表示第一次和第二次查询的持续时间分别为 17ms 和 210ms,总时间为 229,这不是 12 和 88 .. 这是怎么回事? 有没有办法在执行计划中确定查询中最慢的部分?

【问题讨论】:

    标签: sql-server-2008 sql-execution-plan


    【解决方案1】:

    持续时间!= 费用。

    成本包括其他因素,例如创建和释放对象(例如使用 XPath 过滤器读取 XML)、内存使用、写入、读取、临时表访问等。

    编辑:

    查看您的执行计划,并将鼠标悬停在“成本”最高的部分上。在您的情况下,创建和执行 XML Reader 和过滤表值函数的服务器“成本”(编译时间、cpu 时间、内存时间等)最多。

    要尝试的另一件事是使用 SQL Server Profiler,并监视“Showplan All”和“Showplan XML”事件。您可以通过单击分析器中的“Showplan XML”事件获得与执行计划相同的视图,并通过单击“Showplan All”事件获得更多详细信息。

    这是一篇讨论这些事件的好文章:

    Capturing Graphical Query Plans with SQL Server Profiler

    【讨论】:

    • 很好,但这是否意味着成本无法告诉您查询是好是坏?有没有办法在执行计划中确定查询中最慢的部分?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    • 2011-04-12
    • 2021-12-09
    • 1970-01-01
    相关资源
    最近更新 更多