如果只打印“1”和打印“2”然后测量当您在SSMS的消息看到消息窗格中的服务器和客户端之间的输出缓冲,那么你牺牲品之间的时间。该print '1'
可能不会立即发送回客户端,SqlClient中,ADO.Net和SSMS也做一些自己的缓冲。所以总的来说,你可能会在你的SSMS结果消息面板中看到'1',比实际发生时晚。更好的是从getdate()打印时间,而不是'1'。通过这种方式,您可以从公式中取出缓冲区,并且可以在消息中看到服务器执行“打印”的时间,而不是SSMS显示其输出的时间。
SET STATISTICS TIME ON
总是会更准确,但有时很难understant到它到底reffers对应的语句。
我usualy做的是这样的:
declare @nowString varchar(100);
declare @start datetime, @end datetime, @rc int, @elapsed int;
set @start = getdate();
select many, fields
from bigtable
join manytables on condition = complex
where matches = many
order by wacky sort;
set @rc = @@rowcount;
set @end = getdate();
set @elapsed = datediff(ms, @start, @end);
set @nowString = cast(varchar(100), getdate(), 14);
raiserror(N'%s: At select No 1. Selected %i rows in %i ms', 10, 1, %nowString, @rc, @elapsed);
set @start = getdate();
...next select here...
你谈论的* *估计计划或*实际*计划? IE浏览器。 SSMS任务栏按钮“显示预计执行计划”显示的计划或在任务栏按钮“包括实际执行计划”打开时运行查询后显示的计划。 – 2010-01-22 23:47:09
我正在谈论实际的执行计划,但它说“估计操作员成本”仍然 – 2010-01-22 23:55:35