在SQL Server中,如果我们想准确知道某条查询语句到底花了多长时间,最直接的方法就是使用SET STATISTICS TIME命令。它能在语句执行结束后,把CPU时间和总耗费时间打印出来,非常适合做简单的性能核对。

什么是SET STATISTICS TIME
SET STATISTICS TIME是SQL Server提供的一个会话级设置。当它被开启后,后续批处理里的每条语句执行完,都会额外返回类似下面的消息:
- SQL Server解析和编译时间
- SQL Server执行时间
这些数据能让我们区分是编译慢还是真正执行慢。
如何在SSMS中开启
在SQL Server Management Studio里,只需要先执行打开统计的语句,再跑你的查询即可:
-- 开启时间统计 SET STATISTICS TIME ON; -- 随便一条查询 SELECT * FROM Orders WHERE CreateTime > '2023-01-01'; -- 关闭统计 SET STATISTICS TIME OFF;
执行后,在消息窗口会看到如下内容:
SQL Server 分析和编译时间: CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。 SQL Server 执行时间: CPU 时间 = 15 毫秒,占用时间 = 18 毫秒。
在代码中如何使用
如果是自己的程序调用,也可以在连接后发送这条命令。下面用C#举例:
using System;
using System.Data.SqlClient;
class Demo
{
static void Main()
{
string connStr = "Server=127.0.0.1;Database=Test;Trusted_Connection=True;";
using (var conn = new SqlClient.SqlConnection(connStr))
{
conn.Open();
var cmd = new SqlCommand("SET STATISTICS TIME ON; SELECT COUNT(*) FROM Users;", conn);
// 执行并忽略结果集,统计信息会出现在消息中
cmd.ExecuteScalar();
}
}
}
结果字段说明
| 字段 | 含义 |
|---|---|
| 分析和编译时间 | 生成执行计划花费的时间 |
| 执行时间 CPU时间 | 实际消耗的处理器时间 |
| 执行时间 占用时间 | 从开始到结束的总时长,包含等待 |
注意事项
开启SET STATISTICS TIME只影响当前会话,不会对其他连接产生性能干扰。但如果把输出消息采集到程序里,需要处理好额外的信息行。另外,想要更完整的耗时分布,可以配合SET_STATISTICS_IO一起使用,查看逻辑读写情况。
SQL_ServerSET_STATISTICS_TIME查询耗时性能优化T-SQL修改时间:2026-07-24 22:54:27