大表,多表关联使用临时表哪种效率高?

xixi_168 2014-07-02 12:13:58
有三四张大表关联,关联条件有些复杂。
以下四种方式,哪种方式效率更高些,更好些,最好从原理上讲解下。
1、直接关联。
2、with as 临时表方式,
3、把这三张表分别按各自条件过滤掉生成实表。create tble as 方式,然后三张较小的表关联。
4、存储过程中使用回话级临时表global temporary table这种方式。

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


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

...全文
1155 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu_25526097 2016-06-24
  • 打赏
  • 举报
回复
是的..........
AcHerat 2014-07-03
  • 打赏
  • 举报
回复
可以将2和3结合起来,用with as的方式将每个表用筛选条件过滤为小表,然后多表关联得到想要的结果。
xixi_168 2014-07-03
  • 打赏
  • 举报
回复
引用 1 楼 wildwave 的回复:
这几个不是一类东西,怎么搭配要看执行计划 with as里的结果集当被多次引用时,结果集会被存到临时表中。如果只引用一次,则相当于子查询
存到临时表中,是存在什么地方,临时表空间吗还是内存中? 还有的说大表关联建临时表只是为了防止临时表空间不足导致回滚。没有其他的效果吗?
xixi_168 2014-07-03
  • 打赏
  • 举报
回复
引用 2 楼 sjcss 的回复:
关键是你的索引建的好不好~尽量通过索引缩小各个数据集的大小就可以了. 基本原理是在join之前就把各个表按条件(有索引)缩小到最小,然后再join就可以了.
忘了说,这些表都不建索引的。
xixi_168 2014-07-03
  • 打赏
  • 举报
回复
引用 5 楼 AcHerat 的回复:
可以将2和3结合起来,用with as的方式将每个表用筛选条件过滤为小表,然后多表关联得到想要的结果。
with as 是临时表,但是create table 是建的实表这个怎么结合起来呢。另外 create global temporary table 没有用的吗。
美到心痛 2014-07-02
  • 打赏
  • 举报
回复
关键是你的索引建的好不好~尽量通过索引缩小各个数据集的大小就可以了. 基本原理是在join之前就把各个表按条件(有索引)缩小到最小,然后再join就可以了.
小灰狼W 2014-07-02
  • 打赏
  • 举报
回复
这几个不是一类东西,怎么搭配要看执行计划 with as里的结果集当被多次引用时,结果集会被存到临时表中。如果只引用一次,则相当于子查询

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧