用merge into 来试试:
merge into a t1 
using b t2 on (t1.row_id=t2.row_id)
when matched then
update set t1.xx1=t2.xx1

解决方案 »

  1.   

    update A set row_id=rownum;
    建议不用用ROWNUM为关联条件去更新,理论上讲每次执行查询,同一条记录对应的ROWNUM有可能不相同
    如果这样更新有些值可能会有错误
      

  2.   

    直接用test_id为关联条件不行吗?
    update /*+ APPEND */  A set xx1=(
          select xx1 from B where B.test_id=A.test_id);
    在test_id上建立对应的索引另外一种方法是用存储过程处理,设置10000?提交一次,批处理,ROWID........
      

  3.   

    不知道你的程序是什么逻辑,
    你的
    update A set row_id=rownum;
    update B set row_id=rownum;逻辑上没问题吗?
    当然这不是重点,重点是你update比较慢~
    表B百万数据应该还好吧,但如果你感觉慢,可以在表B上建一个(row_id,xx1)的索引,这样更新时相对数据量就小很多.
    如果还不能满足你性能的要求,去了解一下bulk collect ,forall,批量实现
      

  4.   

    不是按test_id更新吗?咋又建了row_id?明显写得语句和需求不一致啊
    update  A set xx1=(
          select xx1 from B where B.test_id=A.test_id);
    语句本身已经很简洁了,想提升速度只能在数据结构上去优化了,建立索引 或 批量提交
      

  5.   


    两条记录中可能会出现test_id一样,而xx1的取值不一样的情况,如果按test_id更新的话,可能更新的结果会出错