从oracle 11g中具有60亿行的其他表更新表中的列

时间:2014-03-03 10:49:13

标签: oracle11g

我有2个表A,表B.这两个表的大小都是500GB,表的一些列如下所示。

表A

  • ID
  • 类型
  • DateModified

在Table中添加了一个新列作为CID,可在表B中找到。

表B

  • ID
  • CID
  • DateGenerated

表A在dateModified上分区,表B未分区,我的任务是从表B获取CID并在表A中更新它。两个表都有数十亿条记录。

我尝试过Merge / SQL,但速度太慢,无法在2天内完成。

1 个答案:

答案 0 :(得分:0)

向现有表添加新列会导致行碎片。将新列更新为某个值可能会导致大量行链接,分区或不分区。是的,即使有足够的索引等,这也很慢。

推荐方法:

  • 由于您有分区,因此您使用的是Enterprise Edition,因此您可以使用架构版本功能解决此问题。
  • 但是,如果这是一次性操作并且您不知道如何使用它,我会使用"创建表...作为"做法。从头开始构建表,然后在准备好时将其切换。注意不要错过任何涓流加载的交易。通过分区它会很快(在强大的服务器上写500 GB,比如50 MB /秒,这不是不现实的,需要3个小时)。