Persisted Computed Column 需要更新所有行还是只更新受影响的行?

Does Persisted Computed Column need to update all rows or just affected rows?

在这个Whosebug article中,我明白了Persist的意思以及它们的优缺点。但是,我试图进行更深入的研究,但找不到 "update" 那个。

这是我的场景(下面的 TL;DR 版本):我有 Order table 和 OrderDetail table,如下图所示:

OrderDetail.Subtotal 是一个计算列,使用这个简单的公式:([Price]*[Quantity])

Order.Total是计算列,公式为:([dbo].[CalculateOrderTotal]([ID])),函数如下:

ALTER FUNCTION [dbo].[CalculateOrderTotal]
(
    @orderID int
)
RETURNS int
AS
BEGIN
    DECLARE @result int;

    SELECT @result = SUM(od.Subtotal)
    FROM OrderDetail od
    WHERE od.OrderID = @orderID;

    RETURN @result;
END

TL;DR:我的 OrderOrderDetail 经常更新,但主要是插入。我还需要经常查询它,尽管不像插入那样频繁。如果我检查 SubtotalTotalPersist,因为大多数操作不会影响行的 Subtotal 字段,SQL 服务器知道数据库只需要更新受影响的记录,还是必须重新计算 Order table 的所有记录?是好是坏?

P.s:我正在使用 SQL Server 2008 以防万一。

计算列在 selected 时进行计算。
当计算它们的表达式发生更改时,将计算持久化列。
因此,对于 select 性能,我建议使用 persist,但对于存储 space 不要使用 persist,因为 "regular" 计算列实际上并未存储在数据库中。