替代Where子句中的函数

时间:2015-03-10 01:17:22

标签: sql sql-server sql-server-2008 tsql

我已经读过在WHERE子句中有一个函数会减慢速度(不是SARGABLE)。我现在面对这种情况,像这样的查询...

在下面的查询中,Fn是一个内置的CRM Dynamics DateTime函数,用于将UTCTime转换为LocalTime

SELECT 
    Column1,
    Column2,
    Column3,
    Column4,
    Fn(UTCTimeColumn) AS LocalTimeColumn
FROM
    SomeTable
WHERE
    Fn(UTCTimeColumn) between '2 Jan 2015 00:00:00.000' and '8 Jan 2015 23:59:59.000'

也尝试了这个......

SELECT 
    * 
FROM(
    SELECT 
        Column1,
        Column2,
        Column3,
        Column4,
        Fn(UTCTimeColumn) AS LocalTimeColumn
    FROM
    SomeTable) T    
WHERE
    T.LocalTimeColumn between '2 Jan 2015 00:00:00.000' and '8 Jan 2015 23:59:59.000'

在WHERE子句中使用这样的函数会使事物爬行。

  • 如何改善表现?
  • 我有什么选择?

1 个答案:

答案 0 :(得分:2)

您可以添加一个持久化列,该列将调用该函数一次:

add column LocalTimeColumn as Fn(UTCTimeColumn) persisted