【问题标题】:Updating large volume of records更新大量记录
【发布时间】:2014-05-12 13:00:04
【问题描述】:

我有一个包含超过 1000 万条记录的表,我必须从我从其他少数几个再次具有大量记录的表中获得的数据中更新该表的多个列。所有的表都被索引了

我尝试分批进行并在并发会话中更新,但这需要很长时间。有没有其他方法可以解决这个问题?

【问题讨论】:

  • 查看 John Bittner 在 AskTom 上的评论:asktom.oracle.com/pls/apex/…
  • 我确实尝试了上述方法之一,并且由于我要从不同的表中更新多个列,因此创建表仍然需要很长时间。
  • 我发现有趣的是创建表需要很长时间,该操作应该几乎是即时的。您是否正在创建这样的表“create table xyz_HOLD as select * from xyz where rownum

标签: plsql sql-update multiple-columns records large-data-volumes


【解决方案1】:

解决方案是建立一个全新的表(没有记录)并并行化。

1) 首先创建你的虚拟保持表(没有行):

create table xyz_HOLD as select * from xyz where rownum
避免记录所有这些操作*...

更改表 xyz_HOLD 不记录

*使用nologging,如果系统中止,您只需再次重新运行“更新”,因为您在主表中有原始数据

2)

 插入 /*+ 并行追加 (xyzhold,12) */
      进入 xyz_hold xyzhold (field1, field2, field3)
    选择 /*+ 并行 (x,12) */ xyz.field1, my_new_value_for_field2, xyz.field3
      从 xyz x
     在哪里废话废话

3) 完成后,重命名表,或者如果您的原始表已分区,则交换分区,并且您只更新了一个分区。

+) 显然你还需要在之后根据需要重建不道德等。

【讨论】:

    猜你喜欢
    • 2016-03-14
    • 2013-09-26
    • 2018-06-02
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多