SQL Server 对列应用函数时如何使用索引?

yqkkidmi  于 2022-12-17  发布在  其他
关注(0)|答案(1)|浏览(150)

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

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

在执行这个查询时,[Timestamp]列上的索引会被使用吗?否则,什么是提高查询性能的好策略?

bz4sfanl

bz4sfanl1#

不可以,因为您是在数据行上呼叫函数,所以索引无法预先知道哪些值符合您的准则。您必须不惜一切代价避免在WHERE子句中行程数据行值。比较日期时间的最佳方法通常是 windows 比较,例如:

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];

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

相关问题