在SSMS中,我可能会运行需要一段时间才能运行的查询。如果我再次运行查询,它几乎立即完成,当我进行修改(例如添加新索引)时很难看到改进。
人们如何定时查询,以便他们能够准确地判断他们的更改是否实际上有所改善?
注意,我使用sql server 2005
答案 0 :(得分:3)
在具有生产数据卷的测试/ dev服务器上,您将使用以下内容清除执行和数据缓存:
CHECKPOINT
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
<强> NB。不要在生产服务器上运行它
这是因为,在您第一次执行查询后,数据将缓存在RAM中,执行计划将被缓存。因此,对于后续调用,可以更快地检索它 - 主要是由于数据缓存,因为从RAM获取数据要比访问磁盘快得多。
所以你会:
1)运行初始查询并记录统计数据
2)使查询/索引改变
3)按上述清除缓存
4)运行查询并记录新的统计数据
另外,只需比较改变之前/之后的执行计划就会给出差异的指示 - 例如如果你看到用索引搜索替换了表扫描。
答案 1 :(得分:2)
您应该查看查询执行计划 - 注意索引扫描或表扫描,您希望寻求。在SSMS中 - &gt;查询 - &gt;包括实际执行计划。再次运行查询,您将在选项卡中看到结果。
您看到您的结果正在优化 - 这也可能在生产中发生。但是,您的查询可能也必须与其他生产系统竞争,这可能会不时地从缓存中删除您的查询结果。
http://www.sql-server-performance.com/tips/query_execution_plan_analysis_p1.aspx