我正在尝试确定两个不同查询的相对性能,并有两种方法可供我使用:
1. 运行两者并为每个查询计时
2. 运行两者并从实际执行计划中获取“查询成本”
这是我为查询计时而运行的代码...
DBCC FREEPROCCACHE
GO
DBCC DROPCLEANBUFFERS
GO
DECLARE @start DATETIME SET @start = getDate()
EXEC test_1a
SELECT getDate() - @start AS Execution_Time
GO
DBCC FREEPROCCACHE
GO
DBCC DROPCLEANBUFFERS
GO
DECLARE @start DATETIME SET @start = getDate()
EXEC test_1b
SELECT getDate() - @start AS Execution_Time
GO
我得到的是以下内容:
Stored_Proc Execution_Time Query Cost (Relative To Batch)
test_1a 1.673 seconds 17%
test_1b 1.033 seconds 83%
执行时间的结果直接与查询成本的结果相矛盾,但我很难确定“查询成本”的实际含义。我最好的猜测是它是 Reads/Writes/CPU_Time/etc 的集合,所以我想我有几个问题:
是否有明确的来源来解释该措施的含义?
人们还使用哪些其他“查询性能”指标,它们的相对优点是什么?
需要注意的是,这是一个中型 SQL Server,在 MS Server 2003 Enterprise Edition 上运行 MS SQL Server 2005,具有多个处理器和 100 多个并发用户。
编辑:
经过一番麻烦后,我设法获得了对该 SQL Server 的 Profiler 访问权限,并且可以提供额外的信息(它支持与系统资源相关的查询成本,而不是执行时间本身......)
Stored_Proc CPU Reads Writes Duration
test_1a 1313 3975 93 1386
test_1b 2297 49839 93 1207
令人印象深刻的是,使用更多的 CPU 和更多的读取需要更少的时间 :)