update语句慢
UPDATE ONE T
SET T.AGE =
(SELECT T2.AGE
FROM TWO T2
WHERE T2.ID=T.ID
);
ONE TWO 都是2百万级别的数据,update执行起来速度太慢了。有没有好的方法让速度快速提起来。
------最佳解决方案--------------------ONE TWO 的id都建了索引了吧
------其他解决方案--------------------如果id有索引的话, 可以分段update, 不要全表update,那样肯定是慢的。
------其他解决方案--------------------1)索引建了吗?
2)控制事务单位,比如2000条update完一个commit
3)用Oracle专用的update也可以考虑:比如对视图的UPDATE语句
------其他解决方案--------------------分段来更新这样可以防止死锁
------其他解决方案--------------------循环ONE表,在循环体里面按条件一条条更新,5000次commit一下。
------其他解决方案--------------------这个操作经常使用还是临时用一次,要是临时,可以创建一个新表,将需要的内容通过INSERT INTO SELECT 的方式添加进去,
要是是经常使用 建议采用 分批提交,可以考虑加上NOLOGGING
------其他解决方案--------------------用merge into试试看
------其他解决方案--------------------感谢各位,通过下面的方法解决的
declare
row_num number := 0;
begin
for c_usr in (select login_id from im_user t where id is null) loop
update im_user i set i.id =
(select id from bmw_users u where i.login_id = u.nick)
where login_id = c_usr.login_id;
row_num := row_num + 1;
if mod(row_num,100) =0 then
commit;
end if;
end loop;
commit;
end;