有个表大概有百万条数据,有个处理,要选出其中某些数据,根据某个字段(A)去另外一个表查出来它对应的数据(B),然后把A更新成B。现在的处理方法是用游标,处理完一条接着commit,非常的慢。请问有没有什么好的解决方法?

解决方案 »

  1.   

    表关联更新呀,肯定比你用游标更新要快的多
    update table1 t1
       set t1.a = (select max(b) from table2 t2 where t1.a = t2.a)
     where exists(select 1 from table2 t2 where t1.a = t2.a); 
      

  2.   


    可以使用这样的方式更新也可以用更新view的方式更新建议看看这个文章
    http://blog.csdn.net/inthirties/archive/2009/08/28/4493085.aspx
      

  3.   


    这么大的数据流,绝对不能用游标来处理,用批量update语句来处理吧!比如 update tb1 
         set tb1.A=(select tb2.B tb2 where tb2.A=tb1.A and rownum=1)
         where ........--过滤tb1,选择你需要的数据进行update。
      

  4.   

    频繁的commit,性能肯定不高,可设个变量,更新到几万条记录时commit一次
      

  5.   

    不能频繁的commit;
    你可以考虑,当又了10000条dml语句之后,再commit一次。