查询实际执行计划与跟踪结果非常不同

时间:2009-12-10 00:40:00

标签: sql-server performance

我重建了索引并更新了统计信息。

查询很简单,WHERE子句中有子查询。

SELECT TOP 1 * from MeetingPost_reg
WHERE userid = 1234 AND meetingpost_regid <> 9999 
AND DateStart < (SELECT DateStart FROM MeetingPost_reg WHERE meetingpost_regid = 9999)
ORDER BY DateStart desc

datastart上有一个索引,userid。 meetingpost_regid是PK,带有聚簇索引。

SHOWPLAN_TEXT:

StmtText                                                                                                                                                                                                                                                         
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
  |--Compute Scalar(DEFINE:([MeetingPost_reg].[message]=[MeetingPost_reg].[message], [MeetingPost_reg].[ProcessedComment]=[MeetingPost_reg].[ProcessedComment], [MeetingPost_reg].[ProcessedMsg]=[MeetingPost_reg].[ProcessedMsg], [MeetingPost_reg].[pos_discou
       |--Top(1)
            |--Bookmark Lookup(BOOKMARK:([Bmk1000]), OBJECT:([dbo].[MeetingPost_reg]))
                 |--Nested Loops(Inner Join, OUTER REFERENCES:([MeetingPost_reg].[datestart]))
                      |--Clustered Index Seek(OBJECT:([dbo].[MeetingPost_reg].[PK_MeetingPost_reg]), SEEK:([MeetingPost_reg].[meetingpost_regid]=9999) ORDERED FORWARD)
                      |--Index Seek(OBJECT:([dbo].[MeetingPost_reg].[MeetingPost_reg12]), SEEK:([MeetingPost_reg].[datestart] < [MeetingPost_reg].[datestart]),  WHERE:([MeetingPost_reg].[meetingpost_regid]<>9999 AND Convert([MeetingPost_reg

(6 row(s) affected)

执行计划:

执行计划图显示了一个0行的索引搜索和一行的聚集索引搜索,总成本为〜.0006,总CPU成本〜.002

跟踪显示持续时间为250,CPU 172,读取11.跟踪事件类为 SQL:StmtCompleted

为什么这个查询使用了这么多CPU?

1 个答案:

答案 0 :(得分:2)

Profiler事件显示172ms工作时间和250ms已用时间,11页读取。那是SQL:StmtCompleted还是SQL:BatchCompleted事件?如果以后,这个查询是批处理中的唯一语句吗?

对于执行计划,您最好发布实际计划,将整个计划减少到2个运营商,4个数字(0,1,.0006和.002)从计划信息中丢失了很多。

捕获的计划和语句执行是否完全引用 相同的执行?如果是,您是否认为返回计划的成本包含在跟踪事件中?