比如在package中,有a,b表
a--数据量小,只有10条记录
b--数据量大,有一万条记录
写法1
for re_a in(select * from a) loop
      for re_b in(select * from b) loop
         ..........
     end loop;
写法2
for re_a in(select * from b) loop
      for re_b in(select * from a) loop
         ..........
     end loop;
end loop;看过资料,好象说多层循环是先读外层数据的,
那么写法1应该比2快了,是这样吗,没经过验证

解决方案 »

  1.   


    比如在package中,有a,b表
    a--数据量小,只有10条记录
    b--数据量大,有一万条记录
    写法1
    for re_a in(select * from a) loop
          for re_b in(select * from b) loop
             ..........
         end loop;
    写法2
    for re_a in(select * from b) loop
          for re_b in(select * from a) loop
             ..........
         end loop;
    end loop;看过资料,好象说多层循环是先读外层数据的,
    那么写法1应该比2快了,是这样吗,没经过验证
      

  2.   

    这种的m*n和n*m没有区别
    你可以试试
      

  3.   

    对这种PROC中都要遍历的,m*n和n*m有区别吗?
      

  4.   

    还以为DML中查询语句中外层内层呢
    这个感觉里层小表在里层的话可能快一点
    小表的数据能全部读取到缓冲区,大表数据量大只能读取到缓冲区一部分
    小表在里面,重复查询,都是从缓冲区读取,IO速度应该会快一点
      

  5.   


    DML中查询语句中外层内层应该是小表放外层,因为select是先查外层,再查内层的,是吧
      

  6.   

    DML中查询语句中外层内层应该是小表放外层,因为select是先查外层,再查内层的,是吧
    早期的oracle可以肯定应该小表放外层,最新版本没做过测试,不确定oracle会不会自己做优化