执行查询所花费的时间似乎比查询中测量的时间长......?

Gle*_*ong 2 sql-server t-sql

我正在尝试优化存储过程。我仅使用日期变量将一些手动分析插入到我的 SP 中,然后使用 datediff 显示经过的时间。

例如

DECLARE @MyDate datetime = GetDate()
PRINT '..profiling text...'
PRINT DateDiff(ms, @MyDate, GetDate())
SET @MyDate = GetDate()

<execute some actions here>

PRINT '..elapsed time...'
PRINT DateDiff(ms, @MyDate, GetDate())
SET @MyDate = GetDate()
Run Code Online (Sandbox Code Playgroud)

当我在 SQL Server Management Studio 的查询窗口中运行它时,我的配置文件的总耗用时间大约为 5 秒。但是,整个查询的持续时间更像是 14 秒,如右下角的查询属性所示(以及当我用手表手动计时时)。

有什么理由会发生这种情况吗?我放置或声明日期变量的位置没有任何问题。通过 datediff 和查询所用的时间输出的时间肯定不匹配。

还应该注意的是,在优化时,我没有返回任何大型数据表。我只是将它们插入到临时表中,以确保我没有返回结果的开销。

Dan*_*man 7

T-SQL 批处理测量的运行时间将仅包括执行时间。

客户端应用程序测量的经过时间不仅包括执行时间,还包括编译时间和网络延迟。

运行您的批处理SET STATISTICS TIME ON以查看未计算的时间是否是由于编译。使用 SSMS,您还可以包含更详细的客户端统计信息(查询--> 包含客户端统计信息)。