首页 > 解决方案 > 在时间范围内的一天中搜索时,哪个日期比较更有效?

问题描述

在查询表以按一天获取数据时,我发现了 2 个选项。

假设我想获取 2020-01-01 的所有数据和名为“CreatedDate”的日期列,这是一个日期时间。

我的“WHERE”可以是:

Where CreatedDate between '2020-01-01' and '2020-01-02'

但是我开始使用以下格式:

Where CAST(CreatedDate as date) = '2020-01-01'

我发现 2 选项更“友好”,因为我正在与更具可读性的单个值进行比较。

我想知道需要 cast 的格式是否会消耗更多的计算资源并且会增加查询权重?

标签: sqlsql-serverdatedatetimecasting

解决方案


他们做不同的事情。第一个在 2020-01-02 午夜获取数据。等价的逻辑是:

where CreatedDate >= '2020-01-01' and
      CreatedDate < '2020-01-02'

至于你的问题,你应该在你的数据和系统上测试这两个版本。两个版本都将使用索引,(CreatedDate)因为 SQL Server 允许使用索引转换为日期。从使用索引的角度来看,它们是等价的。

也就是说,如果没有索引,日期转换可能会有一点开销,因此在这种情况下,第二个版本可能会慢一些。


推荐阅读