如何有效地获取与 DateTime 列中的日期匹配的记录?

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

我有一个 LogNet 表,我什至不知道有多少行。可能接近一百万甚至更多。每条记录都有一个记录创建时间的日期时间。当我需要特定日期的记录时,我会运行这样的查询:

SELECT * FROM AppLog WHERE CONVERT(DATE,[Date]) = CONVERT(DATE,'04/05/2023')

本质上,我将列值转换为日期以删除时间,并将 varchar 转换为日期以匹配它。这使我们的服务器达到极限,因此我只能在半夜运行它。我打算为 [Date] 添加一个索引,看看是否有帮助。

我知道 CONVERT 效率不高,那么最好的方法是什么?如果重要的话,我确实知道我需要的记录的时间范围。

sql tsql ssms
1个回答
0
投票

使用 sargable 表达式,例如

WHERE [Date] >= '2023-05-04' AND [Date] < '2023-05-05'

如果日期文字没有时间部分,则时间部分为零,因此

>=
比较将从 2023-05-04 的第一部分开始(在本例中),而
<
比较将查找不在 2023-05-05(或更晚,当然)的最新条目。

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