我有一个 LogNet 表,我什至不知道有多少行。可能接近一百万甚至更多。每条记录都有一个记录创建时间的日期时间。当我需要特定日期的记录时,我会运行这样的查询:
SELECT * FROM AppLog WHERE CONVERT(DATE,[Date]) = CONVERT(DATE,'04/05/2023')
本质上,我将列值转换为日期以删除时间,并将 varchar 转换为日期以匹配它。这使我们的服务器达到极限,因此我只能在半夜运行它。我打算为 [Date] 添加一个索引,看看是否有帮助。
我知道 CONVERT 效率不高,那么最好的方法是什么?如果重要的话,我确实知道我需要的记录的时间范围。
使用 sargable 表达式,例如
WHERE [Date] >= '2023-05-04' AND [Date] < '2023-05-05'
如果日期文字没有时间部分,则时间部分为零,因此
>=
比较将从 2023-05-04 的第一部分开始(在本例中),而 <
比较将查找不在 2023-05-05(或更晚,当然)的最新条目。