Jam*_*ler 4 sql-server etl sql-server-2008
我有一个包含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
Run Code Online (Sandbox Code Playgroud)
分配给此的DBA更喜欢更改加载表的ETL过程.我知道持久计算字段需要一些时间来回填数据.使用计算字段真的有很大的开销吗?
UPDATE
计算字段预计不会改变多年
如果定义确实发生变化,则必须具有追溯力
我认为添加或填充列的开销并不是重点.一个更重要的问题是,对于数据库的生命周期,您的计算列定义是否始终对表中的每一行都有效?如果您需要更改定义,或者如果在某个日期之后添加的新行应该具有不同的定义但旧行应该保留当前的行,那么计算列将是不切实际或完全不可能的.
我的偏好是添加一个普通列并添加业务规则以将其填充到您的ETL过程中.这也确保您的所有业务规则都在一个地方(您的ETL代码),而不是在代码和架构之间分开.