我的表格包含
calcIncome
计算列:
CREATE TABLE foo
(
id int,
name varchar(100),
[other columns],
calcIncome AS dbo.fn_calcIncome() PERSISTED NOT NULL
)
查询:
select *
from foo
where calcIncome > 100
即使我将
calcIncome
设置为 PERSISTED
,此查询仍然为每一行调用 fn_calcIncome
。
如果计算列的行为与非持久计算列相同,那么将计算列设置为
PERSISTED
的目的到底是什么?
摘自 Paul White 的文章 正确保留计算列
将持久计算列添加到产品中是为了 允许索引建立在确定性但“不精确”的基础上(浮动 点)列
因此,防止重新评估计算 - 包括 UDF 并不是设计目标。
但文章也提到有一个跟踪标志 176 在这方面可以提供帮助。