现在有表: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中。
各位还有没别的更好的优化方式??
表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中。
各位还有没别的更好的优化方式??
解决方案 »
- 关于脏数据
- 100分在线等:SQL Developer转移SQL Server Express问题求助
- CentOS6安装oracle 11gR2后,sqlplus使用出错
- (求高人指点指点)oracle高手过招:使用case when then替换字段数据,比实际的多了几百条数据 求解
- 请教SQL
- 我的日期数据年份都是两位的啊
- 当前系统时间增加几分钟问题
- 求一个行列置换的头疼SQL
- 求救!!!怎样MOUNT DATABASE IN A COMPATIBLE MODE??
- 关于数据类型转换的问题
- versions_startscn和versions_endscn与start_scn commit_scn的联系
- 两张表根据某一条件来修改另外一张表的数据
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';
+1如果只是50W左右的数据,你不用太过担心性能问题,除非是你的服务器特别差,现在一般的PC做服务器都能承担起这样的查询,并且效率不会太差;PS:相应的索引要建起来。
select的性能,看执行计划了。
insert into的性能,disable index/append/nolog
考虑到会滚段的压力,批量提交。
ORA-O1652:无法通过128(在表空间TEMP中)扩展temp段
ORA-27059:无法减小文件大小
OSD-04005:SetFilePointer()失败,无法读取文件
O/S-Error:(OS 112)磁盘空间不足。看来只能用临时表一试了