当前位置: 代码迷 >> Oracle开发 >> 大表,多表关联使用临时表哪种效率高?该怎么处理
  详细解决方案

大表,多表关联使用临时表哪种效率高?该怎么处理

热度:51   发布时间:2016-04-24 06:39:44.0
大表,多表关联使用临时表哪种效率高?
有三四张大表关联,关联条件有些复杂。
以下四种方式,哪种方式效率更高些,更好些,最好从原理上讲解下。
1、直接关联。
2、with  as 临时表方式,
3、把这三张表分别按各自条件过滤掉生成实表。create tble as 方式,然后三张较小的表关联。
4、存储过程中使用回话级临时表global temporary table这种方式。

这个是我个人理解,以前处理过大数据量的关联,直接关联大概要跑几个小时,但是分割成临时表方式,10多分钟就跑完了。
with as 这种是写到内存中的表,按道理比直接读数据块要更直接些,是不是要快些。
还有一种理解,with as 相当于子查询。子查询跟直接关联效率区别不大,甚至还不如直接关联。


请各位给出些解释,从原理上的。谢谢!


------解决方案--------------------
这几个不是一类东西,怎么搭配要看执行计划

with as里的结果集当被多次引用时,结果集会被存到临时表中。如果只引用一次,则相当于子查询
------解决方案--------------------
关键是你的索引建的好不好~尽量通过索引缩小各个数据集的大小就可以了.
基本原理是在join之前就把各个表按条件(有索引)缩小到最小,然后再join就可以了.
------解决方案--------------------
可以将2和3结合起来,用with as的方式将每个表用筛选条件过滤为小表,然后多表关联得到想要的结果。
  相关解决方案