添加并填充列或添加持久计算列?

时间:2012-12-20 19:21:15

标签: sql-server sql-server-2008 etl

我有一个包含1000万行,5GB数据,没有主键但是聚簇索引的数据库表。每天都有成千上万的记录被添加。我想添加一个新列:

 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过程。我知道持久计算字段需要一些时间来回填数据。使用计算字段真的有很大的开销吗?

更新

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

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

1 个答案:

答案 0 :(得分:7)

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

我的偏好是添加一个普通列并添加业务规则以将其填充到ETL过程中。这也确保您的所有业务规则都在一个地方(您的ETL代码),而不是在代码和架构之间分开。