【问题标题】:Compare execution time of two similar TSQL queries比较两个相似 TSQL 查询的执行时间
【发布时间】:2014-10-12 11:08:48
【问题描述】:

我有 2 个 sql 查询。第二个是第一个的修改版本,它们之间只有很小的区别。

我想知道两个sql的执行时间,所以给了like

--查询1

set statistics time on
    Select...
    .........
set statistics time off

--Result
(2 row(s) affected)

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 39 ms.

--查询2

set statistics time on
    Select...
    .........
set statistics time off

--Result
(2 row(s) affected)

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.

对于第二个查询,经过的时间是 0 毫秒,它应该在第一个 sql 的执行时间附近。它给了 0 毫秒,只是因为我在 [查询 2] 之前执行了 [查询 1]。 如何查看第二次查询的经过时间,我应该删除统计信息还是什么?

【问题讨论】:

  • 高级查询,包括窗口函数、动态sql和查询性能”可以进入dba.stackexchange.com
  • @huMpty duMpty 这些在问题中都不明显
  • @Used_By_Already:执行时间可能与query-performance有关
  • 可能重复:请参阅:stackoverflow.com/questions/3764011/compare-two-queries 特别注意 AdaTheDev 的评论;您想清除运行查询之间的问题,并尽可能以不同的顺序运行多次
  • @huMpty duMpty 实际上与查询或其性能无关,它与如何比较(TSQL)查询有关。我猜它可能会交给 dba,但无论如何这是一个以前回答过的问题。

标签: sql sql-server tsql sql-server-2012


【解决方案1】:

sys.dm_exec_query_stats 中的last_execution_time 列将包含信息。也可以在 SQL Profiler 中将其捕获为SQL:StmtCompleted 事件的Duration 列。

话虽如此,还有更多方法可以比较查询,而不仅仅是时间。我想到了逻辑读取、IO 和等待统计信息。我建议您阅读How to analyse SQL Server performance,详细了解如何衡量、衡量什么以及如何比较查询。

【讨论】:

  • 谢谢 Remus,这个链接非常有用。
  • [execution_count] 列是否给出了以毫秒为单位的执行时间?
  • execution_count自上次编译后计划执行的次数。 如链接中所述
  • last_worker_time = 80 表示上次执行时,耗时 80 毫秒。对吗?
  • 不,应该是last_elapsed_time。我建议您更仔细地阅读链接的文档。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-11
  • 1970-01-01
相关资源
最近更新 更多