我有(继承)一些可怕的外观(可能非常好!)传统的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,具体取决于案例/比较时。
答案 0 :(得分:0)
您可以编写一个用户定义的函数,将ScheduleDate和ActualDate作为参数并返回输出日期。