【问题标题】:Performance difference when using DATEADD and CAST in different order以不同顺序使用 DATEADD 和 CAST 时的性能差异
【发布时间】:2015-10-05 14:40:25
【问题描述】:

一位同事向我展示了一个查询,他在同时使用 DATEADD 和 CAST 时遇到了一些严重的性能问题。通过切换顺序,他获得了更好的性能。为什么订单对性能如此重要?

这个 where 子句运行良好:

WHERE IHist.[DateTime] BETWEEN DATEADD(DD, -30,CAST(GETUTCDATE() AS Date)) AND DATEADD(DD, 1, CAST(GETUTCDATE() AS Date))

这个 where 子句永远存在:

WHERE IHist.[DateTime] BETWEEN CAST(DATEADD(DD, -30,GETUTCDATE()) AS DATE) AND CAST(DATEADD(DD, 1, GETUTCDATE()) AS DATE)

【问题讨论】:

  • 您只能猜测。请发布执行计划:) 我怀疑它运行缓慢时没有使用索引。可能 SQL Server 估计不好,不得不把数据存到 tempdb...

标签: sql-server casting query-performance dateadd


【解决方案1】:

由于值是静态的,最好在开头定义它们

declare @d1 date, @d2 date
select
    @d1 = DATEADD(DD, -30, CAST(GETUTCDATE() AS Date)),
    @d2 = DATEADD(DD,   1, CAST(GETUTCDATE() AS Date))

然后在WHERE子句中使用

【讨论】:

  • 这就是我最终要做的。这种方式效率更高。谢谢!
猜你喜欢
  • 2013-03-28
  • 2013-01-18
  • 2012-12-29
  • 2021-03-09
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多