假设我在一个DateTime列(名为[Timestamp])上有一个索引,然后我在下面的查询中使用该列,
SELECT [Id], [Timestamp]
FROM [dbo].[MyTable]
WHERE FORMAT([Timestamp], 'yyyy/MM/dd HH') = '2022/12/14 01'
ORDER BY [Id]
在执行这个查询时,[Timestamp]
列上的索引会被使用吗?否则,什么是提高查询性能的好策略?
假设我在一个DateTime列(名为[Timestamp])上有一个索引,然后我在下面的查询中使用该列,
SELECT [Id], [Timestamp]
FROM [dbo].[MyTable]
WHERE FORMAT([Timestamp], 'yyyy/MM/dd HH') = '2022/12/14 01'
ORDER BY [Id]
在执行这个查询时,[Timestamp]
列上的索引会被使用吗?否则,什么是提高查询性能的好策略?
1条答案
按热度按时间bz4sfanl1#
不可以,因为您是在数据行上呼叫函数,所以索引无法预先知道哪些值符合您的准则。您必须不惜一切代价避免在
WHERE
子句中行程数据行值。比较日期时间的最佳方法通常是 windows 比较,例如:注:可以通过检查执行计划来检查是否使用了索引。