在包含执行计划时,SQL Server查询在SSMS中更快

时间:2010-10-22 12:28:12

标签: sql sql-server performance testing sql-execution-plan

在SQL Server 2005管理工作室中,我正在测试一个使用一些表变量的查询,其中一个表变量具有集群唯一约束。我注意到当我包含实际执行计划来分析它时,总执行时间实际上下降了很多。

这是什么原因,我应该只测试包含执行计划的选项关闭时的总执行时间。

谢谢!

2 个答案:

答案 0 :(得分:3)

对我来说听起来有点奇怪。你确定你看到的差异不是缓存吗? 我总是通过不包括执行计划来测试sproc的性能,并且我会在每次运行之前清除缓存,以便进行公平的比较(在测试/ dev db服务器上,而不是生产)。

DBCC FREEPROCCACHE -- will clear the execution plan cache
DBCC DROPCLEANBUFFERS -- will clear the data cache

答案 1 :(得分:0)

我刚刚遇到同样的问题,在尝试了解包含执行计划的方式或原因如何加速后,我现在得出的结论是SSMS只是误报了总的执行时间。因此,你的问题的答案是它根本没有真正运行得很快,遗憾的是,你应该在没有包含执行计划的情况下执行计时。

当最初执行时间为几百毫秒的测试时很难诊断,但是一旦我能够通过较慢的查询重现问题,就会更容易看到。在下面的屏幕截图中,存储过程的五次运行返回多个结果集。前三次运行没有返回执行计划,第四次和第五次运行。尽管出现了明显更快的响应(约200毫秒而不是〜5秒),查询实际上仍需要大约5秒才能完成。我猜客户端统计信息中存在一个错误,即返回执行计划的时间,而不是在某些情况下的完整查询。

timings