优化查询:DECLARE 与直接日期时间转换性能比较

问题描述 投票:0回答:1

我试图了解声明日期时间转换变量并使用它与直接在 SQL Server 查询中转换日期之间是否存在任何性能差异。

以下是两个示例查询: 查询1:每次都进行日期时间转换

SELECT * 
FROM TestMessages
WHERE CreatedDate > CONVERT(DATETIME, '2023-12-18 00:00:00', 120);

查询 2:声明日期时间转换变量

DECLARE @yourDateString NVARCHAR(19) = '2023-12-18 00:00:00';
DECLARE @ConvertedDate DATETIME = CONVERT(DATETIME, @yourDateString, 120);

SELECT * 
FROM TestMessages
WHERE CreatedDate > @ConvertedDate;

这两个查询之间有明显的性能差异吗?声明日期时间转换变量如何影响查询的执行时间?此外,可以使用哪些 SQL Server 工具或技术来分析和衡量这种性能差异?

我一直在 SQL Server 查询中尝试两种不同的方法来进行日期时间转换。在一个查询中,我直接转换日期时间值,在另一个查询中,我使用 DECLARE 创建转换变量。我预计会观察到这两种方法之间潜在的性能差异,但结果并不像我预期的那么清晰。我想了解这些方法对性能的影响以及优化 SQL Server 查询中的日期时间转换的任何推荐实践。

sql-server t-sql query-optimization datetime-conversion
1个回答
0
投票

WHERE CreatedDate > CONVERT(DATETIME, '2023-12-18 00:00:00', 120);

基数估计可能会更准确。

对于

CreatedDate > @ConvertedDate
谓词,它只会假设 30% 匹配,除非您还使用
OPTION (RECOMPILE)
来允许它嗅探变量的值。

对于

CreatedDate > CONVERT(DATETIME, '2023-12-18 00:00:00', 120)
,它可以在直方图中查找该值并从中获取估计值。

© www.soinside.com 2019 - 2024. All rights reserved.