更新大量记录

时间:2014-04-01 16:09:44

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

我有一个超过10密耳记录的表,我必须从我从其他几个表中获得的数据更新此表的多个列,这些表再次具有大量记录。所有表都已编入索引

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

1 个答案:

答案 0 :(得分:0)

解决方案是构建一个全新的表(带有nologging)并进行并行化。

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

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

Alter table xyz_HOLD nologging

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

2)

    insert /*+ append parallel (xyzhold,12) */ 
      into xyz_hold xyzhold (field1, field2, field3) 
    select /*+ parallel (x,12) */ xyz.field1, my_new_value_for_field2, xyz.field3 
      from xyz x 
     where blah blah blah 

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

+)显然,您还需要根据需要重建等等。