如:有A 表300万数据,B 表7000万数据,C表与A表结构一致。A表字段a1,a2与B表字段b1,b2可以匹配。
需求:通过A表字段a1与B表字段b1,查询出A表中,匹配B的记录,插入C表中,然后更新A表中a2字段为B表中b2 字段。
目前用for 循环,用exists,in,都很慢,各位有没有好的建议,谢谢。

解决方案 »

  1.   

    在a1 a2 b1 b2上建立索引
      

  2.   

    谢谢,楼上的回复;有点写错了,最后是去更新C表中a2字段为B表中b2 字段。
    现在用for 匹配出来大概20万数据,要跑差不多两个小时。
      

  3.   

    用临时表(增加排序空间,nologging)啊,先把A表中匹配B表的结果插入进去,高水位先插入啊
    insert/*+append */ into temp
    select a.* 
    from a, b
    where a.a1=b.b1
    然后用insert /*+append */ into c select col1,col2 from temp 
    update b 
    set b.b2=(select c.c2 from c where ..)
    exists (select 1 from c where b.x=c.x)
    for循环1万以内的都很快,大于很慢
      

  4.   

    或者temp 临时表 建成hash分区表,这个数据分布比较均匀,然后循环分区,在去处理,总之把循环的次数控制最小