它看起来像查询立即执行 这可能是查询计划允许开始快速返回行。
例如,如果您执行SELECT * FROM a_large_table
,您将立即看到一些行,但检索整个结果集需要一些时间。 Mgmt Studio报告的实际执行时间是多少(查询完成后显示在状态栏中)?
如果要在不向客户端检索数据的情况下测试查询性能,可以执行SELECT INTO #temp_table
。这将需要一些额外的I/O,但仍会给你一个相当好的执行时间估计。
UPD。
你也可以运行诸如SELECT COUNT(*) FROM (<your query here>)
或SELECT SUM(<some field>) FROM (<your query here>)
之类的东西 - 运气好的话,它会使服务器执行查询并聚合结果,基本上做同样的工作再加上一点额外的东西。但以这种方式扭曲结果是非常容易的 - 查询优化器很聪明,并且需要非常小心以确保测量您想要测量的结果(因为使用不同的执行计划来测量查询根本没有意义)。
我建议你再考虑一下你想测量什么以及为什么。在任何真实场景中,对“纯”查询持续时间不感兴趣 - 因为您永远不想丢弃查询结果(结果就是您为什么首先需要查询,对吧?)。因此,您需要将结果返回给客户端,或者将其存储在某个地方,或者将其与另一个表等结合起来 - 通常您需要测量查询执行情况,包括处理结果的时间。
最后一个通知。如果你希望你能以某种方式迫使服务器在1秒内执行这个查询,因为你认为服务器在其他13秒内什么都不做,你错了。就像他们说的那样,SELECT没有被破坏。
有什么可以帮助查询优化 - 对于单个查询分析器不会帮你太多。分析查询计划,调整您的表结构,尝试重写查询,如果遇到麻烦,请在SO上发布另一个问题。
管理工具报告查询花了14秒,但正如我所说我可以立即滚动reults视图。有没有其他方法可以测试这个,而不写入临时表? – 2010-11-19 18:11:23
这绝对意味着整个查询需要14秒,但您看到的行会更快地返回。如果不查看查询计划和数据,很难详细解释这一点,但这种行为绝不意外。 – VladV 2010-11-20 21:10:57
为避免混淆“SELECT INTO”或向查询添加假集合,SSMS中有一个选项“执行后放弃结果” – 2010-11-20 21:35:09