三大表与表联接方式

1.NESTED LOOPS 嵌套循环

2.HASH JOIN 哈希联接

3.SORT MERGE 排序合并联接

1.NESTED LOOPS  嵌套循环

嵌套循环的本质是将外部数据集连接到内部数据集,对于外部数据集中与单表谓词匹配的每一行,数据库将检索内部数据集中满足连接谓词的所有行。

工作原理:

a.优化器确定驱动行源并将其指定为外部循环。

b.优化器将另一行源指定为内部循环。

c.从外部行源获取一行

d.探查内部行源以查找与谓词条件匹配的行

e.重复前面的步骤,直到通过获取请求获得所有行

嵌套循环优先使用场景:

a.查询结果集偏小。

b.数据库以优化器模式设置为联接大型数据集FIRST_ROWS

c.内部循环有有效访问方式(例如存在高效索引)

HINT :

/*+ ORDERED USE_NL(d) */   ----d 为内部循环表-被驱动表

2.HASH JOIN 哈希联接

优化器使用两个数据集中的较小者在内存中的连接键上构建哈希表,并使用确定性哈希函数指定哈希表中存储每一行​​的位置。然后,数据库扫描更大的数据集,探测哈希表以查找满足联接条件的行。

工作原理:

  1. 数据库对较小的数据集执行完整扫描,然后在PGA和磁盘上构建一个哈希桶阵列。

    当PGA哈希区域填满时,数据库将在哈希表中找到最大的分区,并将其写入磁盘上的临时空间。数据库将磁盘上属于该磁盘分区的任何新行以及PGA中的所有其他行存储。因此,哈希表的一部分在内存中,一部分在磁盘上。

  2. 数据库在读取其他数据集时会经过第一遍。

    对于每一行,数据库执行以下操作:

    1. 将相同的哈希函数应用于一个或多个联接列,以计算相关哈希桶的数量。

    2. 探测哈希表,以确定存储桶中的行中是否存在行。

      如果散列值指向内存中的一行,则数据库将完成连接并返回该行。但是,如果该值指向磁盘上的哈希分区,则数据库使用与原始数据集相同的分区方案将该行存储在临时表空间中。

  3. 数据库逐个读取每个磁盘上的临时分区

  4. 数据库将每个分区行连接到相应的磁盘临时分区中的行.

哈希联接优先使用场景:

a.联接相对大量的数据(或必须连接很大比例的小表)且联接为等联接

HINT : USE_HASH

3.SORT MERGE 排序合并联接

排序合并联接是嵌套循环联接的一种变体。

如果联接中的两个数据集尚未排序,则数据库将它们排序。这些是SORT JOIN操作。对于第一个数据集中的每一行,数据库都会根据匹配的行来探测第二个数据集,并将它们连接起来,并将其起始位置基于上一次迭代中进行的匹配。这就是MERGE JOIN操作。

工作原理:

与嵌套循环联接中一样,排序合并联接读取两个数据集,但在尚未对它们进行排序时对其进行排序。

对于第一个数据集中的每一行,数据库在第二个数据集中找到起始行,然后读取第二个数据集,直到找到不匹配的行。

通常情况下,只有在以下情况发生时,才会使用排序合并连接:

      1)RBO模式

      2)不等值连接(>,<,>=,<=)

      3)哈希连接被禁用时(_HASH_JOIN_ENABLED=false)

      4)数据源已排序

HINT:

USE_MERGE

ORACLE表与表联接的几种方式的更多相关文章

  1. ORACLE数据库实现自增的两种方式

    Mysql数据库因为其有自动+1,故一般我们不需要花费太多时间,直接用关键字auto_increment即可,但是Oracle不行,它没有自动增长机制.顾我们需要自己去实现.一般有两种方式,但是这两种 ...

  2. ORACLE SQL前端补0的三种方式。

    前端补0的三种方式. select lpad(sal,8,'0') from emp;select to_char(sal,'00000000') from emp;select substr('00 ...

  3. mysql copy复制拷贝表数据及结构的几种方式(转)

    mysql拷贝表操作我们会常常用到,下面就为您详细介绍几种mysql拷贝表的方式,希望对您学习mysql拷贝表方面能够有所帮助.假如我们有以下这样一个表:id username password--- ...

  4. 浏览器原生 form 表单POST 数据的两种方式

    我们在提交表单的时候,form表单参数中会有一个enctype的参数.enctype指定了HTTP请求的Content-Type. 常用有两种:application/x-www-form-urlen ...

  5. Form表单提交数据的几种方式

    一.submit提交 在form标签中添加Action(提交的地址)和method(post),且有一个submit按钮(<input type='submit'>)就可以进行数据的提交, ...

  6. struts2学习笔记之五:表单数据收集的几种方式

    方法一:struts2对ModelDriven模式的支持(模型驱动模式) Struts2可以采用类似于Struts1中的ActionForm方式收集数据,这样方式叫ModelDriven模式 Acti ...

  7. AntDesign Form表单字段校验的三种方式

    1.使用getFieldDecorator的rules规则 最简单的方法就是使用getFieldDecorator中的rules验证.rules中定义校验规则,message为校验不通过时的提示文字. ...

  8. 获取form表单元素值的4种方式

    <html><head><title></title><script type="text/javascript"> f ...

  9. 在.jsp中非表单请求action的几种方式总结

    转自:https://www.jb51.net/article/35621.htm 1 一: 复制代码 代码如下: <a href="userAction.do?flag=user_r ...

随机推荐

  1. uni-app网络请求

    对于 GET 方法,会将数据转换为 query string.例如 { name: 'name', age: 18 } 转换后的结果是 name=name&age=18. 对于 POST 方法 ...

  2. 记一次实际开发过程中遇到事务报错问题 Transaction synchronization is not active

    一:问题场景 在一次http请求的后台接口中返回结果中出现了这个错误信息“Transaction synchronization is not active”,意思是“事务同步器没有激活”,但是被调用 ...

  3. postman-7-前置请求脚本

    前面讲了,tests初如何校验请求之后返回值是否正确 那前置脚本,就是处理,请求之前接口该如何处理,什么时候会用到呢? 比如:接口字段time,需要填入时间,而且这个是需要当前时间的,: 需要达到自动 ...

  4. 递归实现DropDownList层级

    .NET下拉框DropDownList层级实现 这也算是第一篇博客吧,技术比较菜,写得不好,希望各位博友见谅哈,多多提提意见. 今天做电商网站新闻添加的时候,下拉框选择新闻类别觉得太长,又无法定位其准 ...

  5. python 并发专题(一):并发基础相关概念,术语等

    一.线程 1.概念 线程是程序执行流的最小执行单位,是行程中的实际运作单位. 进程是一个动态的过程,是一个活动的实体.简单来说,一个应用程序的运行就可以被看做是一个进程,而线程,是运行中的实际的任务执 ...

  6. Django之 admin组件

    本节内容 路由系统 models模型 admin  views视图 template模板 Django Admin介绍 admin 是django 自带的用来让你进行数据库管理的web app. 提供 ...

  7. 数据可视化实例(十二): 发散型条形图 (matplotlib,pandas)

    https://datawhalechina.github.io/pms50/#/chapter10/chapter10 如果您想根据单个指标查看项目的变化情况,并可视化此差异的顺序和数量,那么散型条 ...

  8. 快速突击 Spring Cloud Gateway

    认识 Spring Cloud Gateway Spring Cloud Gateway 是一款基于 Spring 5,Project Reactor 以及 Spring Boot 2 构建的 API ...

  9. Illegal instant due to time zone offset transition (Asia/Shanghai)_夏令时问题

    项目报错信息: Connot parse "1991-04-14",illegal instant due to time zone offset transition(Asia/ ...

  10. 集训作业 洛谷P1433 吃奶酪

    嗯?这题竟然是个绿题. 这个题真的不难,不要被他的难度吓到,我们只是不会计算2点之间的距离,他还给出了公式,这个就有点…… 我们直接套公式去求出需要的值,然后普通的搜索就可以了. 这个题我用的深搜,因 ...