嵌套循环(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执行计划连接方式相关推荐

  1. oracle函数lp,Oracle 执行计划的查看方式

    访问数据的方法:一.访问表的方法:1.全表扫描,2.ROWID扫描 二.访问索引的方法:1.索引唯一性扫描,2.索引范围扫描,3.索引全扫描,4.索引快速全扫描,5.索引跳跃式扫描 表连接:1.排序合 ...

  2. Oracle查看SQL执行计划的方式

    Oracle查看SQL执行计划的方式 获取Oracle sql执行计划并查看执行计划,是掌握和判断数据库性能的基本技巧.下面案例介绍了多种查看sql执行计划的方式: 基本有以下几种方式: 1.通过sq ...

  3. ORACLE执行计划的一些基本概念

    本文介绍了ORACLE执行计划的一些基本概念,供学习应用. 一.相关的概念 Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的.对每个表都有一个rowi ...

  4. 海天 oracle,Oracle执行计划详解

    作者:TTTBLOG --- 简介: 本文全面详细介绍oracle执行计划的相关的概念,访问数据的存取方法,表之间的连接等内容. 并有总结和概述,便于理解与记忆! +++ 目录 --- 一.相关的概念 ...

  5. oracle执行计划分析(转载)

    2019独角兽企业重金招聘Python工程师标准>>> (转载,原文地址:http://blog.itpub.net/24478467/viewspace-705754/) 简介: ...

  6. [转]Oracle执行计划的相关概念

    [转]Oracle执行计划的相关概念 本文介绍了ORACLE执行计划的一些基本概念,供学习应用. 一.相关的概念 Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统 ...

  7. ORACLE 执行计划分析

    http://www.cnblogs.com/rootq/archive/2008/09/06/1285779.html ORACLE 执行计划分析 一.什么是执行计划 An explain plan ...

  8. 【转】Oracle执行计划解释

    Oracle执行计划解释 一.相关的概念     Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的. 对每个表都有一个rowid的伪列,但是表中并不物 ...

  9. Oracle执行计划详解

    ---引用------ 作者:TTT BLOG 本文地址:http://blog.chinaunix.net/u3/107265/showart_2192657.html --- 简介: 本文全面详细 ...

最新文章

  1. tensorflow+numpy 深度学习相关函数(持续更新)
  2. hog svm 视频 matlab,matlab版hog+svm图像二分类
  3. Unity3D对手机屏幕触摸的控制脚本
  4. android实现重复动画,android – 多次重复AnimatorSet动画
  5. HTML 表格中的行合并与列合并
  6. Eclipse控制项目的访问名称
  7. AJAX+JavaScript无刷新检查用户名
  8. C/C++ scanf 函数中%s 和%c 的简单差别
  9. 程序员真是一门苦差事!
  10. php nodelist,了解NodeList、HTMLCollection以及NamedNodeMap的使用(代码)
  11. if条件判断C语言,if条件判断语句,谁能帮我分析一下?
  12. 集合框架之ArrayList集合
  13. PHP经验——PHPDoc PHP注释的标准文档(翻译自Wiki)
  14. TestComplete自动化测试视频教程
  15. jquery自适应宽度轮播图
  16. 一个正经的前端学习 开源 仓库(每日更新)-698道知识点
  17. 写CSDN博客时,调节字体大小、颜色及其他样式的常用操作方法
  18. 腾讯/网易/263/阿里云企业邮箱登录入口
  19. VMI - 供应商管理库存
  20. Hadoop Ha (High avilable)配置

热门文章

  1. Infragistics NetAdvantage 2006 Volume 2 CLR 2.0曲折安装
  2. 测试django_如何像专业人士一样测试Django Signals
  3. Web漏洞扫描(一:利用WVS进行漏洞扫描)
  4. 数据库备份到文件服务器,数据库文件备份到云服务器上
  5. python 数据类笔试题_一道 Python 类的笔试题详解
  6. 网站ui的配色有哪些需要注意的?
  7. 学完UI设计可以从事哪些工作
  8. oracle创建DBA角色命令,oracle常用DBA命令
  9. leetcode--删除链表的倒数第N个节点--python
  10. 如何定时备份数据库并上传七牛云