在此Stackoverflow article中,我了解Persist
的含义及其优缺点。但是,我试图进行更深入的研究,但无法找到关于"更新"之一。
这是我的场景(TL;下面的DR版本):我有Order
表和OrderDetail
表,如下图所示:
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 :我的Order
和OrderDetail
经常更新,但主要是INSERTING。我也需要经常查询,但不像插入那么频繁。如果我将Subtotal
和Total
检查为Persist
,因为大多数操作都不会影响行的Subtotal
字段,SQL Server是否知道它这样数据库只需要更新受影响的记录,或者它必须重新计算Order
表的所有记录?是好还是坏?
P.s:我正在使用SQL Server 2008以防万一。
答案 0 :(得分:1)
计算列在选择时计算 当计算它们的表达式发生变化时,将计算持久列 因此,对于选择性能,我建议使用持久性,但对于存储空间不要使用持久性,因为"常规"计算列实际上并未存储在数据库中。