oracle 数据库
我现在有一个需求,Oracle数据库中有 700多万数据,我现在想修改其中一个字段的值,数据至少 500万,(如,字段type=0的 我要修改为 type=10) 请哪位高手 告诉我 用什么方法 更快的执行。我 用一个update 语句在数据库中操作,一晚上都没有执行完,时间太长了。请告诉我一个快速的执行方法。我现在 再用存储过程,不过看着速度 也不似很快。我的 存储过程 如下,
create or replace procedure up_table as
begin
update rytojs t set t.RLD_SFJTSLR='10' where t.RLD_SFJTSLR='0';
commit;
end;
exec up_table
请各位看看我的存储 过程有什么问题。
小弟 急需 解决 办法
答案:分段提交,比如10000行提交一次会快很多,不要建立索引,如果该字段有索引最好先drop掉,更新完再重建。因为你修改的数据占总数据的绝大部分,如果字段有索引,维护索引的开销很大。
其他:给你的RLD_SFJTSLR字段建个索引试下。预计速度应该能提高不少! 你试试这样
insert into rytojs_res (RLD_SFJTSLR)
select
case when t.RLD_SFJTSLR='0' then '10' else t.RLD_SFJTSLR end as RLD_SFJTSLR
from rytojs t
转换成select insert into 循环,每一万次commit一下 相应的字段建个索引就完了 没必要其他折腾 不要建立索引,因为你修改的字段占大多数,如果加索引的话会很费资源,而且更慢
还是分段提交比较好!
上一个:oracle 问题 我快疯了
下一个:oracle afiedt.buf 在哪可以看到