2010-06-03 118 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