Where 子句中的替代函数

Alternative for Function in Where Clause

我读到在 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 子句中使用这样的函数会使事情变得爬行。

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

add column LocalTimeColumn as Fn(UTCTimeColumn) persisted