如何比较两个查询X和Y并说X比Y好,当它们在小情况下几乎占用相同的时间?
问题是我有两个应该在一个非常大的数据库上运行的查询,因此运行和评估不是一个选项。因此,我们创建了一个小型数据库来执行一些测试。评估哪个查询更好是一个问题,因为在我们的测试基础上,它们几乎在同一时间运行(大约5分钟)。除了返回的时间之外,衡量查询效果的另一种方法是什么?
答案 0 :(得分:34)
SET STATISTICS IO ON
SET STATISTICS TIME ON
运行查询并比较各种表和执行时间的逻辑读取。
答案 1 :(得分:5)
如前所述,检查执行计划。
重要的是,通过在每次运行之间清除缓存来公平地比较2个查询,只是为了确保您没有看到由于数据已经被缓存(不在生产服务器上运行)的结果导致的结果偏差:< / p>
DBCC DROPCLEANBUFFERS -- clear proc plan cache
DBCC FREEPROCCACHE -- clear data cache
然后我通常会检查读取,写入,CPU和持续时间以进行比较。
使用生产级别的数据量进行测试非常重要(理想情况下,要更好地了解它的扩展性)。在那些卷上你会真正看到任何性能差异。使用小数据量进行测试可能会让您在以后遇到问题。
答案 2 :(得分:2)
您是否检查了查询计划?如果查询返回相同的数据并且花费相同的时间来执行,我的猜测是查询计划几乎相同,这意味着两个查询之间没有任何有意义的差异。
另外,您是否考虑过在数据库大小发生变化时查询的执行方式不同?
我想知道你是否过早地优化了代码。在我看来,如果我的查询有效并且可以理解,我可以通过索引解决性能问题。这通常比更改查询以提高性能更容易。
答案 3 :(得分:0)
在显着不同的数据集上评估查询性能通常没什么意义。查询计划及其效率可能会因数据统计信息而有很大差异。
因此,要获得任何实际的估计,您需要一个尽可能接近“真实”数据库的数据库。最重要的是,拿一份“大数据库”并调查你的查询。