2010-06-03 119 views
1

有以下代码:SQL Server执行计划显示什么?

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 ..发生了什么事? 有没有一种方法可以在执行计划中确定这是查询最慢的部分?

回答

2

持续时间!=成本。

成本包括其他因素,如创建和释放物(如您的XML阅读使用XPath过滤器),内存使用情况,写,读,临时表访问等

编辑:

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

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

下面是讨论这些事件的好文章:

Capturing Graphical Query Plans with SQL Server Profiler

+0

很大,但是这是否意味着成本不能告诉你的查询是否是好还是坏?有没有办法可以在执行计划中确定这是查询最慢的部分? – Tim 2010-06-03 19:31:25