以不同顺序使用 DATEADD 和 CAST 时的性能差异
Performance difference when using DATEADD and CAST in different order
一位同事向我展示了一个问题,他在同时使用 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)
由于值是静态的,最好在开头定义它们
declare @d1 date, @d2 date
select
@d1 = DATEADD(DD, -30, CAST(GETUTCDATE() AS Date)),
@d2 = DATEADD(DD, 1, CAST(GETUTCDATE() AS Date))
然后在WHERE子句中使用
一位同事向我展示了一个问题,他在同时使用 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)
由于值是静态的,最好在开头定义它们
declare @d1 date, @d2 date
select
@d1 = DATEADD(DD, -30, CAST(GETUTCDATE() AS Date)),
@d2 = DATEADD(DD, 1, CAST(GETUTCDATE() AS Date))
然后在WHERE子句中使用