我(继承)了一些看起来很糟糕的遗留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个DateDiff便宜),例如
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略微增加而不是减少。
我如何改进这样的语句,或者它已经尽可能高效了?
the case/when是select语句的一部分,该语句根据case/when比较返回scheduledate或ActualDate。
您可以编写一个用户定义的函数,将ScheduleDate和ActualDate作为参数并返回输出日期。