2011-05-09 57 views
1

在SSMS中,我可能运行需要一段时间才能运行的查询。如果我再次运行查询,它几乎可以立即完成,因此当我进行诸如添加新索引等修改时,难以看到改进。SQL Server查询时间测试

人们如何计时查询,以便他们能够准确地衡量他们的变化是否实际上有所改善?

注意,我使用SQL Server 2005

回答

2

你应该看看查询执行计划 - 注意索引扫描或表扫描,你要寻找。在SSMS - >查询 - >包含实际执行计划。再次运行您的查询,您将在选项卡中看到结果。

您正在看到您的结果正在优化 - 这在生产中也可能会发生。但是,您的查询可能不得不与其他生产系统竞争,这可能会不时从缓存中删除您的查询结果。

http://www.sql-server-performance.com/tips/query_execution_plan_analysis_p1.aspx

+1

进行修改如添加一个新索引会使计划无效并导致它被重新编译,所以我认为这是数据页已经在缓冲区缓存中,这真的在这里产生了重要影响。 – 2011-05-09 21:21:39

+0

听起来像一个合理的假设。您可以清除缓冲区缓存 - 除非您计划永远不要缓存结果,否则不会推荐这么做。 http://msdn.microsoft.com/en-us/library/ms187762.aspx – Sam 2011-05-09 21:24:55

3

在一个测试/开发服务器,与生产数据卷,您使用以下将清零执行和数据高速缓存:

CHECKPOINT 
DBCC DROPCLEANBUFFERS 
DBCC FREEPROCCACHE 

NB。不要在生产服务器上运行此操作

这是因为,在您第一次执行查询后,数据将被缓存到RAM中,并且执行计划将被缓存。因此,对于后续调用,可以更快地检索它 - 主要是由于数据缓存,因为从RAM获取数据比打印磁盘要快得多。

所以,你会:
1)运行初始查询和记录统计
2)使查询/指数变化
3)按照以上
4)运行查询并记录新的统计清除缓存
另外,仅比较改变之前/之后的执行计划将会给出差异的指示 - 例如如果你看到一个表扫描替换为索引查找。