+ -
当前位置:首页 → 问答吧 → oracle存储过程中的多表查询优化

oracle存储过程中的多表查询优化

时间:2011-09-09

来源:互联网

现在有表:A、B、C、D、E五张,其所有字段都为varchar2类型。
  表A字段:a1,a2,a3,a4 ; 表B字段:b1,b2,b3,b4 ;
  表C字段:c1,c2,c3,c4 ; 表D字段:d1,d2,d3,d4 ;
  表E字段:e1,e2,e3,e4 ;
   
  存储过程执行第一步,先进行5张表的联合查询:
  表A通过a1=b1 and a2=b2和表B进行内连接,并且a3='3' and b3='3',结果记作RESULT_A;
  表C通过c1=RESULT_A.a1 and c2=RESULT_A.b2和RESULT_A进行内连接,并且c4='4',结果记作RESULT_B;
  表D通过d1=RESULT_B.b1 and d3=RESULT_B.b3和RESULT_B进行内连接,并且d4='4' and RESULT_B.c3='3'结果记作RESULT_C;
  表E通过e1=RESULT_C.d1 and e2=RESULT_C.a4和RESULT_C进行内连接,并且e3='3'。结果记作RESULT_D
   
  存储过程执行第二步,将上查询结果RESULT_D插入到新建表F中(表F结构省略)
 
  由于5张表中的数据很大(至少50w),目前的想法:能否将上面两张表A、B的查询结果先存到临时表中,再让临时表和第三张表C查询,查询的结果再放到临时表中和第四张表D关联查询.....依次执行,最终结果存放到表F中。
   
  各位还有没别的更好的优化方式??

作者: xiaoranchenxi   发布时间: 2011-09-09

原始的方法是两表查询建一个试图,然后用视图再和第三张表联合查询。由于数据量级别较大,担心性能问题。。。

作者: xiaoranchenxi   发布时间: 2011-09-09

insert into f as
select [fields]
from a 
join b on a.a1=b.b1 and a.a2=b.b2
join c on c.c1=a.a1 and c.c2=b.b2
join d on d.d1=b.b1 and d.d3=b.b3
join e on e.e1=d.d1 and e.e2=a.a4
where a.a3='3' and b.b3='3' and c.c4='4' and d.d4='4' and e.e3='3';

作者: nGX20080110   发布时间: 2011-09-09