oracle执行计划连接方式
嵌套循环(Nested Loops (NL))
假如有A、B两张表进行嵌套循环连接,那么Oracle会首先从A表中提取一条记录,然后去B表中查找相应的匹配记录,如果有的话,就把该条记录的信息推到等待返回的结果集中,然后再去从A表中提取第二条记录,去在B表中找第二条匹配的记录,如果符合就推到返回的结果集中,依次类推,直到A表中的数据全部被处理完成,将结果集返回,就完成了嵌套循环连接的操作。
(散列)哈希连接(Hash Join (HJ))
假如有A、B两张表进行哈希连接,那么ORACLE会首先将B表在内存中建立一棵以散列表形式存在的查询二叉树C,然后开始读取A表的第一条记录,从C中去找匹配的记录,如果有,则推到结果集中。再提取A中的第二条记录,如果有,则推到结果集中,以此类推,直到A中没有记录,返回结果集。
(归并)排序合并连接(Sort Merge Join (SMJ) )
假如有A、B两张表进行排序合并连接,ORACLE会首先将A表进行排序,形成一张临时的“表”C,然后将B进行排序,形成一张临时的“表”D,然后将C与D进行合并操作,返回结果集。
如果从预获取的数据量的角度而言,如果B表参与计算的数据量比较小的话,则嵌套循环连接的效率就是比较高的,因为可以很少的IO就可以获取到最终的结果集。但是如果数据量比较大的话,hash join和sort merge join是比较有优势的。
如果从索引的角度而言,索引可以提高nested loops的效率,因为从B表获取数据进行操作,就类似于从单表中查询数据一样,table access full和by index的效率肯定是不一样的,但是这个也取决于B的参与计算的数据量,如果B表的数据都在可以被一次抓取的数据块的大小之内的话,那么索引未必会被使用到。
如果从内存的角度上,同样的数据量nested loops的内存占用应该是最小的,sort merge 应该是最大的,而hash join内存消耗在中间。只是一种感官的直觉,具体没有测试过,因为sort merge 需要创建两个排序表,而hash join则需要对B表创建一棵查询树。
排序 - - 合并连接(Sort Merge Join, SMJ):
a) 对于非等值连接,这种连接方式的效率是比较高的。
b) 如果在关联的列上都有索引,效果更好。
c) 对于将2个较大的row source做连接,该连接方法比NL连接要好一些。
d) 但是如果sort merge返回的row source过大,则又会导致使用过多的rowid在表中查询数据时,数据库性能下降,因为过多的I/O.
嵌套循环(Nested Loops, NL):
a) 如果driving row source(外部表)比较小,并且在inner row source(内部表)上有唯一索引,或有高选择性非唯一索引时,使用这种方法可以得到较好的效率。
b) NESTED LOOPS有其它连接方法没有的的一个优点是:可以先返回已经连接的行,而不必等待所有的连接操作处理完才返回数据,这可以实现快速的响应时间。
哈希连接(Hash Join, HJ):
a) 这种方法是在oracle7后来引入的,使用了比较先进的连接理论,一般来说,其效率应该好于其它2种连接,但是这种连接只能用在CBO优化器中,而且需要设置合适的hash_area_size参数,才能取得较好的性能。
b) 在2个较大的row source之间连接时会取得相对较好的效率,在一个row source较小时则能取得更好的效率。
c) 只能用于等值连接中
转载于:https://www.cnblogs.com/luluQQ/p/5153311.html
oracle执行计划连接方式相关推荐
- oracle函数lp,Oracle 执行计划的查看方式
访问数据的方法:一.访问表的方法:1.全表扫描,2.ROWID扫描 二.访问索引的方法:1.索引唯一性扫描,2.索引范围扫描,3.索引全扫描,4.索引快速全扫描,5.索引跳跃式扫描 表连接:1.排序合 ...
- Oracle查看SQL执行计划的方式
Oracle查看SQL执行计划的方式 获取Oracle sql执行计划并查看执行计划,是掌握和判断数据库性能的基本技巧.下面案例介绍了多种查看sql执行计划的方式: 基本有以下几种方式: 1.通过sq ...
- ORACLE执行计划的一些基本概念
本文介绍了ORACLE执行计划的一些基本概念,供学习应用. 一.相关的概念 Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的.对每个表都有一个rowi ...
- 海天 oracle,Oracle执行计划详解
作者:TTTBLOG --- 简介: 本文全面详细介绍oracle执行计划的相关的概念,访问数据的存取方法,表之间的连接等内容. 并有总结和概述,便于理解与记忆! +++ 目录 --- 一.相关的概念 ...
- oracle执行计划分析(转载)
2019独角兽企业重金招聘Python工程师标准>>> (转载,原文地址:http://blog.itpub.net/24478467/viewspace-705754/) 简介: ...
- [转]Oracle执行计划的相关概念
[转]Oracle执行计划的相关概念 本文介绍了ORACLE执行计划的一些基本概念,供学习应用. 一.相关的概念 Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统 ...
- ORACLE 执行计划分析
http://www.cnblogs.com/rootq/archive/2008/09/06/1285779.html ORACLE 执行计划分析 一.什么是执行计划 An explain plan ...
- 【转】Oracle执行计划解释
Oracle执行计划解释 一.相关的概念 Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的. 对每个表都有一个rowid的伪列,但是表中并不物 ...
- Oracle执行计划详解
---引用------ 作者:TTT BLOG 本文地址:http://blog.chinaunix.net/u3/107265/showart_2192657.html --- 简介: 本文全面详细 ...
最新文章
- tensorflow+numpy 深度学习相关函数(持续更新)
- hog svm 视频 matlab,matlab版hog+svm图像二分类
- Unity3D对手机屏幕触摸的控制脚本
- android实现重复动画,android – 多次重复AnimatorSet动画
- HTML 表格中的行合并与列合并
- Eclipse控制项目的访问名称
- AJAX+JavaScript无刷新检查用户名
- C/C++ scanf 函数中%s 和%c 的简单差别
- 程序员真是一门苦差事!
- php nodelist,了解NodeList、HTMLCollection以及NamedNodeMap的使用(代码)
- if条件判断C语言,if条件判断语句,谁能帮我分析一下?
- 集合框架之ArrayList集合
- PHP经验——PHPDoc PHP注释的标准文档(翻译自Wiki)
- TestComplete自动化测试视频教程
- jquery自适应宽度轮播图
- 一个正经的前端学习 开源 仓库(每日更新)-698道知识点
- 写CSDN博客时,调节字体大小、颜色及其他样式的常用操作方法
- 腾讯/网易/263/阿里云企业邮箱登录入口
- VMI - 供应商管理库存
- Hadoop Ha (High avilable)配置
热门文章
- Infragistics NetAdvantage 2006 Volume 2 CLR 2.0曲折安装
- 测试django_如何像专业人士一样测试Django Signals
- Web漏洞扫描(一:利用WVS进行漏洞扫描)
- 数据库备份到文件服务器,数据库文件备份到云服务器上
- python 数据类笔试题_一道 Python 类的笔试题详解
- 网站ui的配色有哪些需要注意的?
- 学完UI设计可以从事哪些工作
- oracle创建DBA角色命令,oracle常用DBA命令
- leetcode--删除链表的倒数第N个节点--python
- 如何定时备份数据库并上传七牛云