如何比较两个查询?

Use*_*781 21 sql-server query-optimization

我如何比较两个查询X和Y并说X比Y更好,当他们在小情况下几乎占用相同的时间?

问题是我有两个应该在一个非常大的数据库上运行的查询,所以运行和评估不是一个选择.因此,我们创建了一个小型数据库来执行一些测试.评估哪个查询更好是一个问题,因为在我们的测试基础上,它们几乎在同一时间运行(大约5分钟).除了返回的时间之外,衡量查询有多好的另一种方法是什么?

Joe*_*lli 36

SET STATISTICS IO ON
SET STATISTICS TIME ON
Run Code Online (Sandbox Code Playgroud)

运行查询并比较各种表和执行时间的逻辑读取.

  • @CombatCaptain您还可以在SSMS中将比较查询堆叠在一起,然后按"CTRL + M"(包括实际执行计划),然后按"F5".然后将鼠标悬停在"Actual Execution Plan"选项卡中的第一个节点上,并阅读"Estimated Subtree Cost". (12认同)
  • 这些陈述似乎一般都不受支持.ERROR [15001]在SET STATISTICS IO ON时或之前发生语法错误:SET STATISTICS IO ON (2认同)

Ada*_*Dev 6

如前所述,检查执行计划。

重要的是,通过清除每次运行之间的缓存来公平地比较这两个查询,以确保您不会看到由于已经缓存的数据(不在生产​​服务器上运行)的影响而产生的偏斜结果:

DBCC DROPCLEANBUFFERS -- clear data cache
DBCC FREEPROCCACHE -- clear proc plan cache
Run Code Online (Sandbox Code Playgroud)

然后,我通常要做的是检查读取,写入,CPU和持续时间以进行比较。

使用生产级别的数据量进行测试非常重要(最好是查看其规模如何扩展)。在这些数量上,您将真正看到任何性能差异。使用小数据量进行测试可能会让您日后遇到问题。