update语句慢

任第一 2012-11-21 04:02:08
UPDATE ONE T
SET T.AGE =
(SELECT T2.AGE
FROM TWO T2
WHERE T2.ID=T.ID
);

ONE TWO 都是2百万级别的数据,update执行起来速度太慢了。有没有好的方法让速度快速提起来。
...全文
396 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanglipo 2012-11-22
  • 打赏
  • 举报
回复
这个操作经常使用还是临时用一次,要是临时,可以创建一个新表,将需要的内容通过INSERT INTO SELECT 的方式添加进去, 要是是经常使用 建议采用 分批提交,可以考虑加上NOLOGGING
andyguan01_2 2012-11-22
  • 打赏
  • 举报
回复
循环ONE表,在循环体里面按条件一条条更新,5000次commit一下。
任第一 2012-11-22
  • 打赏
  • 举报
回复
感谢各位,通过下面的方法解决的 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;
fw0124 2012-11-22
  • 打赏
  • 举报
回复
用merge into试试看
勿勿 2012-11-21
  • 打赏
  • 举报
回复
分段来更新这样可以防止死锁
linwaterbin 2012-11-21
  • 打赏
  • 举报
回复
1)索引建了吗? 2)控制事务单位,比如2000条update完一个commit 3)用Oracle专用的update也可以考虑:比如对视图的UPDATE语句
iihero_ 2012-11-21
  • 打赏
  • 举报
回复
如果id有索引的话, 可以分段update, 不要全表update,那样肯定是慢的。
软件钢琴师 2012-11-21
  • 打赏
  • 举报
回复
ONE TWO 的id都建了索引了吧

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧