Kimball在他的ETL Toolkit一书中,一直强调:对于有外键约束的表,为了提高load的速度,可以先将外键约束disable,加载完成后再enable(当然另外一个原因是进入数据仓库的数据都是规范的,甚至可以考虑不使用外键约束,即违反约束的数据在Transformation部分就应该解决掉,当然这是设计问题了)。ps:另外两个提高load速度的方法分别为使用sql loader和insert、update分离。当时还不是明白这个过程怎么具体实现,今天看《oracle concept》看到下面话终于明白了一些:
Flexibility for Data Loads and Identification of Integrity Violations
You can disable integrity constraints temporarily so that large amounts of data can be loaded without the overhead of constraint checking. When the data load is complete,you can easily enable the integrity constraints, and you can automatically report any new rows that violate integrity constraints to a separate exceptions table.
看来oracle这点上做的比较完善,还可以将违反完整性约束的数据自动记录到一个exception表中。