SQL查询性能统计信息多次返回

标签 sql sql-server query-performance

我正在 SQL Server Management Studio 上运行此查询 1,看到它返回了 3 条消息,但当内部存储过程有近 10 - 20 条来自统计信息的消息时,情况也是如此。发生了什么事以及为什么我会看到它们?

SET STATISTICS IO,TIME ON;
GO
    SELECT [UserId]
         ,[UserType]
         ,[CreateDT]
         ,[EffectiveDT]
       FROM [dbo].[People] ORDER BY [UserId]
SET STATISTICS IO,TIME OFF;
GO

我收到的消息如下

SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 0 ms.
SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 0 ms.

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

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

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.
Table 'People'. Scan count 1, logical reads 155, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

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

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

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

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

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

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

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

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

查询的总耗时是 143 毫秒 + 143 毫秒吗?

最佳答案

见下文

set statistics time on
select * from test
set statistics time off

输出:

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

现在添加打印语句和一些变量

set statistics time on

print' statistics time '
declare @a int
set @a =1

select * from test
set statistics time off

输出:

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

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

(59 row(s) affected)

(1 row(s) affected)

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

上面这段代码的总执行时间是1+1+264。

希望这对其工作原理有所帮助

关于SQL查询性能统计信息多次返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35913106/

相关文章:

mysql - SQL - 查询性能

MySQL:将值检索到不同的列中

sql - 如何更新一个表中与另一个表不同的行?

mysql - 优化Mysql JOIN查询速度

c# - SQL 监控和插入

php - 即使尽可能设置 UTF-8,也无法显示德语变音符号

sql - PostgreSQL 连接性能

php - 动态更改时间戳 - 建议?

mysql - 从 SQL Server 转换为 MySQL - MERGE

sql-server - 从 SQL Server varbinary 列临时检索数据