oracle要update给表TABLE的字段A加前缀,由于该表的数据量极大,大概有八千万条数据,用普通的语句执行非常慢

oracle要update给表TABLE的字段A加前缀,由于该表的数据量极大,大概有八千万条数据,用普通的语句执行非常慢。
UPDATE TABLE SET A='FTP'||A,
可以怎样优化吗。

写一个loop循环就可以

declare
  i number;
  j number;
begin
  i := 1;
  j := 0;
  select count(1) into j from 表名     where A not like '%FTP%' ;
  loop
    exit when i > j;
 update 表名   set A='FTP'||A
  where A not like '%FTP%'  and rownum < (i + 1000);
    i := i + 1000;
    commit;
  end loop;
end;

新建一张空表,表名设置为期望中的表,创建好后,将原来的表的数据copy到新表中,这种方式执行要多久?

1、这个表当初应该建立成分区表,这样按分区更新即不会造成全表锁,也会缩短更新的时间
2、如果业务频繁,则需要按一定规则如时间段将数据分割,一次更新部分数据(前提是应用先行修改更新,不然新的数据不断产生,更新连绵不绝)
3、根据具体需求和情况,也可以考虑新增一个字段B,其默认值设置为:FTP,提取字段的时间将A、B字段联合即可:B || A as A,不过也会进行全表锁,不过估计时间上应该远低于直接更新字段A,但所有应用在提取字段时需要进行相应修改,特殊情况才会考虑该方案
4、建立一个计算字段C,其值为:'FTP'||A,不过同样需要修改相关应用,提取A字段全部修改为提取C
具体限制和具体需求,考虑具体方案,以上只是抛砖引玉而已…………

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^