4

我有一个包含 1000 万行、5GB 数据、没有主键但有一个聚集索引的数据库表。每天都会添加 100 条数千条记录。我希望添加一个新列:

 ALTER TABLE dbo.CMS_hsplit ADD
     split_locIDacd  AS CONVERT(varchar(8), split) + '-' + 
     CONVERT(varchar(8), CASE WHEN loc_id = 105 THEN acd ELSE loc_id END) PERSISTED

分配给它的 DBA 更愿意更改加载表的 ETL 过程。我知道持久化的计算字段需要一些时间来回填数据。使用计算字段真的有很大的开销吗?

更新

计算字段预计不会改变多年

如果定义确实发生了变化,则必须具有追溯力

4

1 回答 1

7

我认为添加或填充列的开销并不是重点。一个更重要的问题是,在数据库的生命周期内,您的计算列定义是否始终对表中的每一行有效?如果您需要更改定义,或者如果在某个日期之后添加的新行应该具有不同的定义,但旧行应该保留当前定义,那么计算列将不切实际或完全不可能。

我的偏好是添加一个普通列并将用于填充它的业务规则添加到您的 ETL 流程中。这也确保您的所有业务规则都在一个地方(您的 ETL 代码),而不是在代码和模式之间拆分。

于 2012-12-20T19:46:16.717 回答