2010-09-21 81 views
17

如何比较两个查询X和Y,并说X比Y更好,当它们在小型情况下几乎同时进行时?如何比较两个查询?

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

+0

嗨,我只是把这个问题MSSQL – User7354632781 2010-09-21 20:08:46

回答

26
SET STATISTICS IO ON 
SET STATISTICS TIME ON 

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

+8

@CombatCaptain你也可以将比较查询一起堆放在SSMS中,然后按'CTRL + M'(包括实际执行计划),然后按'F5'。然后将鼠标悬停在“实际执行计划”选项卡中的第一个节点上,并阅读“估计的子树成本”。 – 2010-09-21 20:55:57

+2

这些声明似乎不被普遍支持。错误[15001]语句错误发生在或之前:SET STATISTICS IO ON – dokaspar 2012-08-22 12:35:01

2

您是否检查过查询计划?如果查询返回相同的数据并且执行的时间相同,则我的猜测是查询计划几乎相同,这意味着两个查询之间没有任何有意义的区别。

另外,您是否考虑到查询在数据库大小更改方面的性能不同?

我想知道你是否过早地优化代码。在我看来,如果我的查询有效且可以理解,我可以通过索引来解决性能问题。这通常比改变查询来提高性能更简单。

3

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

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

DBCC DROPCLEANBUFFERS -- clear proc plan cache 
DBCC FREEPROCCACHE -- clear data cache 

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

使用生产级别的数据卷进行测试非常重要(理想情况下可以查看它的缩放比例)。在这些卷上,你会看到任何性能差异。使用小数据量进行测试可能会在稍后出现问题。

0

在显着不同的数据集上评估查询性能通常意义不大。查询计划及其效率可能因数据统计数据而大不相同。所以为了得到任何现实的估计,你需要一个尽可能接近“真实”的数据库。最重要的是,拿一份你的“大数据库”并调整你的查询。