【问题标题】:Which date comparison is more efficient when searching in a day in a time range?在时间范围内的一天中搜索时,哪个日期比较更有效?
【发布时间】:2020-01-02 12:42:43
【问题描述】:

在查询表以按一天获取数据时,我发现了 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 选项更“友好”,因为我正在与更具可读性的单个值进行比较。

我想知道需要强制转换的格式是否会花费更多的计算资源并会增加查询量?

【问题讨论】:

  • 比较执行计划。
  • 详细讨论here。而且您现在应该有足够的经验知道您应该始终识别您正在使用的版本和版本,因为功能会有所不同。

标签: sql sql-server date datetime casting


【解决方案1】:

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

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

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

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

【讨论】:

  • 我在执行计划上对其进行了测试,确实,当我使用 from-to range 时,第一个效果稍微好一些。大约 1.35 秒,而施法时为 1.55 秒。谢谢。
猜你喜欢
  • 2017-08-09
  • 1970-01-01
  • 1970-01-01
  • 2015-06-25
  • 1970-01-01
  • 2019-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多