You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

参数化GETDATE()/GETUTCDATE()值是否利于SQL Server复用执行计划?

参数化GETDATE()/GETUTCDATE()对SQL Server执行计划复用的益处

核心目标是让SQL Server能够复用执行计划,参数化这类函数的值确实存在明显益处,以下是两种写法的对比分析:

直接调用函数写法

这种写法直接在查询语句中调用非确定性函数GETUTCDATE():

SELECT [c].[ID], [c].[Name]
FROM [Customer] AS [c]
WHERE [c].[ActivationDate] > DATEADD(day, CAST(-7.0E0 AS int), GETUTCDATE()) AND [c].[ActivationDate] < DATEADD(day, CAST(-7.0E0 AS int), GETUTCDATE())

问题分析:GETUTCDATE()属于非确定性函数,每次执行时返回的时间值都不同。SQL Server会将每次查询中的函数结果视为唯一的字面量,因此每次执行都需要重新编译生成执行计划,无法复用已有计划,在高并发场景下会额外增加大量编译开销,降低整体性能。

参数化写法

先计算GETUTCDATE()的值并赋值给参数,再通过sp_executesql执行参数化查询:

exec sp_executesql N'SELECT [c].[ID], [c].[Name]
FROM [Customer] AS [c]
WHERE [c].[ActivationDate] > @__date1_0 AND [c].[ActivationDate] < @__date2_1',N'@__date1_0 datetime2(7),@__date2_1 datetime2(7)',@__date1_0='2024-04-24 01:32:14.4602195',@__date2_1='2024-04-24 01:32:14.4602223'

益处分析:通过预先计算函数值并参数化后,SQL Server会将这条查询识别为可复用的参数化模板。只要后续执行的查询结构一致、参数类型匹配,就能直接复用之前生成的执行计划,避免重复编译,减少CPU资源消耗,在频繁执行这类查询的场景下,性能提升尤为显著。

内容的提问来源于stack exchange,提问作者Akli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 01:09:59