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
我读到在 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