在比较日期时提高SQL性能-在-
我(继承)了一些看起来很糟糕(可能非常好!)的遗留TSQL代码,我希望提高它的性能。 基本上,我有一个案例陈述,其中我有几个When,看起来类似于: 使用(例如)在比较日期时提高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
(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为参数并返回输出日期