当应用函数到列时如何使用索引?



假设我在DateTime列(名为[Timestamp])上有一个索引,然后我在下面的查询中使用该列,

SELECT [Id], [Timestamp]
FROM [dbo].[MyTable]
WHERE FORMAT([Timestamp], 'yyyy/MM/dd HH') = '2022/12/14 01'
ORDER BY [Id]

执行此查询时是否使用[Timestamp]列上的索引?否则,提高查询性能的好策略是什么呢?

不能,因为您在列上调用函数,所以索引不能提前知道哪些值符合您的标准。您需要不惜一切代价避免操纵WHERE子句中的列值。比较日期时间的最佳方法通常是窗口比较,例如

DECLARE @StartDate datetime2(0) = '2022/12/14 01:00:00'
, @EndDate datetime2(0) = '2022/12/14 02:00:00';
SELECT [Id], [Timestamp]
FROM [dbo].[MyTable]
WHERE [Timestamp] >= @StartDate AND [Timestamp] < @EndDate
ORDER BY [Id];

备注:可以通过检查执行计划来检查索引是否被使用。

相关内容

  • 没有找到相关文章

最新更新