将计算列设置为PERSISTED的目的是什么?

问题描述 投票:0回答:1

我的表格包含

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
的目的到底是什么?

sql sql-server t-sql sql-server-2017
1个回答
0
投票

摘自 Paul White 的文章 正确保留计算列

将持久计算列添加到产品中是为了 允许索引建立在确定性但“不精确”的基础上(浮动 点)列

因此,防止重新评估计算 - 包括 UDF 并不是设计目标。

但文章也提到有一个跟踪标志 176 在这方面可以提供帮助。

© www.soinside.com 2019 - 2024. All rights reserved.