UPDATE ONE T
   SET T.AGE =
       (SELECT T2.AGE
          FROM TWO T2
         WHERE T2.ID=T.ID
     ); ONE TWO 都是2百万级别的数据,update执行起来速度太慢了。有没有好的方法让速度快速提起来。

解决方案 »

  1.   

    ONE TWO 的id都建了索引了吧
      

  2.   

    如果id有索引的话, 可以分段update, 不要全表update,那样肯定是慢的。
      

  3.   

    1)索引建了吗?
    2)控制事务单位,比如2000条update完一个commit
    3)用Oracle专用的update也可以考虑:比如对视图的UPDATE语句
      

  4.   

    循环ONE表,在循环体里面按条件一条条更新,5000次commit一下。
      

  5.   

    这个操作经常使用还是临时用一次,要是临时,可以创建一个新表,将需要的内容通过INSERT INTO SELECT 的方式添加进去,要是是经常使用 建议采用 分批提交,可以考虑加上NOLOGGING
      

  6.   

    感谢各位,通过下面的方法解决的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;