我重建了索引并更新了统计信息。
查询很简单,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?
答案 0 :(得分:2)
Profiler事件显示172ms工作时间和250ms已用时间,11页读取。那是SQL:StmtCompleted还是SQL:BatchCompleted事件?如果以后,这个查询是批处理中的唯一语句吗?
对于执行计划,您最好发布实际计划,将整个计划减少到2个运营商,4个数字(0,1,.0006和.002)从计划信息中丢失了很多。
捕获的计划和语句执行是否完全引用 相同的执行?如果是,您是否认为返回计划的成本包含在跟踪事件中?