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

在比较日期时提高SQL性能-在-,sql,sql-server,datetime,sql-server-2005,case,Sql,Sql Server,Datetime,Sql Server 2005,Case,我(继承)了一些看起来很糟糕(可能非常好!)的遗留TSQL代码,我希望提高它的性能。 基本上,我有一个案例陈述,其中我有几个When,看起来类似于: 使用(例如) (DateTime)ScheduledDate='2012-04-16 10:00:00' (DateTime)实际日期='2012-04-16 11:09:00' 当DATEDIFF(dd,CC.ActualDate,1)=DATEDIFF(dd,CC.ActualDate,1)和DATEDIFF(mi,CC.ScheduledDa

我(继承)了一些看起来很糟糕(可能非常好!)的遗留TSQL代码,我希望提高它的性能。 基本上,我有一个案例陈述,其中我有几个When,看起来类似于:

使用(例如)

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

(DateTime)实际日期='2012-04-16 11:09:00'

当DATEDIFF(dd,CC.ActualDate,1)=DATEDIFF(dd,CC.ActualDate,1)和DATEDIFF(mi,CC.ScheduledDate,CC.ActualDate)0和DATEDIFF(ss,DATEADD(dd,-DATEDIFF(dd,CC.ActualDate,1),1),CC.ActualDate)>0时,则CC.ActualDate

我尝试将其更改为实际比较日期,而不是对照1(因为我认为运行一个DateDiff会比尝试比较两个DateDiff便宜),例如

当DATEDIFF(dd,CC.ScheduledDate,CC.ActualDate)=0和DATEDIFF(mi,CC.ScheduledDate,CC.ActualDate)0和DATEDIFF(ss,DATEADD(dd,-DATEDIFF(dd,CC.ActualDate,1),1),CC.ActualDate)>0时,则CC.ActualDate

然而,使用
SHOWPLAN\u ALL
似乎表明,总的Subtree成本略微增加,而不是减少

我如何改进这样的陈述,或者它已经尽可能有效了吗?


case/when是select语句的一部分,该语句根据case/when比较返回ScheduledDate或ActualDate。

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