在比较-Case中的日期时提高SQL性能 -

时间:2014-03-14 10:59:26

标签: sql sql-server datetime sql-server-2005 case

我有(继承)一些可怕的外观(可能非常好!)传统的TSQL代码,我希望提高它的性能。 基本上我有一个Case语句,其中我有几个WHEN类似于这个:

使用(例如)

(DateTime)ScheduledDate = '2012-04-16 10:00:00'

(DateTime)ActualDate = '2012-04-16 11:09:00'

WHEN DATEDIFF(dd, CC.ScheduledDate, 1) = DATEDIFF(dd, CC.ActualDate, 1) AND DATEDIFF(mi, CC.ScheduledDate, CC.ActualDate) <> 0 AND DATEDIFF(ss, DATEADD(dd, -DATEDIFF(dd, CC.ActualDate, 1), 1), CC.ActualDate) > 0 THEN CC.ActualDate

我尝试更改它以实际比较日期而不是1(因为我认为运行一个DateDiff比试图比较2个日期更便宜),例如。

WHEN DATEDIFF(dd, CC.ScheduledDate, CC.ActualDate) = 0 AND DATEDIFF(mi, CC.ScheduledDate, CC.ActualDate) <> 0 AND DATEDIFF(ss, DATEADD(dd, -DATEDIFF(dd, CC.ActualDate, 1), 1), CC.ActualDate) > 0 THEN CC.ActualDate

然而,使用SHOWPLAN_ALL似乎表明TotalSubtreeCost略有增加而不是减少。

我如何改进这样的声明,或者它是否已经尽可能高效?

case / when是select语句的一部分,它返回ScheduledDate或ActualDate,具体取决于案例/比较时。

1 个答案:

答案 0 :(得分:0)

您可以编写一个用户定义的函数,将ScheduleDate和ActualDate作为参数并返回输出日期。