关于这三种JOIN的理解。Nested loop join,Hash join,Sort merge join

Nested loop join:

步骤:确定一个驱动表(outer table),另一个表为inner table,驱动表中的每一行与inner表中的相应记录JOIN。类似一个嵌套的循环。适用于驱动表的记录集比较小(<10000)而且inner表需要有有效的访问方法(Index)。需要注意的是:JOIN的顺序很重要,驱动表的记录集一定要小,返回结果集的响应时间是最快的。

cost  = outer access cost + (inner access cost * outer cardinality)

|   2 |   NESTED LOOPS                |              |     3 |   141 |     7  (15)|

|   3 |    TABLE ACCESS FULL          | EMPLOYEES    |     3 |    60 |     4  (25)|

|   4 |    TABLE ACCESS BY INDEX ROWID| JOBS         |    19 |   513 |     2  (50)|

|   5 |     INDEX UNIQUE SCAN         | JOB_ID_PK    |     1 |       |            |

EMPLOYEES为outer table, JOBS为inner table.

Hash join

步骤:将两个表中较小的一个在内存中构造一个HASH表(对JOIN KEY),扫描另一个表,同样对JOIN KEY进行HASH后探测是否可以JOIN。适用于记录集比较大的情况。需要注意的是:如果HASH表太大,无法一次构造在内存中,则分成若干个partition,写入磁盘的temporary segment,则会多一个写的代价,会降低效率。

cost = (outer access cost * # of hash partitions) + inner access cost

--------------------------------------------------------------------------

| Id  | Operation            |  Name        | Rows  | Bytes | Cost (%CPU)|

--------------------------------------------------------------------------

|   0 | SELECT STATEMENT     |              |   665 | 13300 |     8  (25)|

|   1 |  HASH JOIN           |              |   665 | 13300 |     8  (25)|

|   2 |   TABLE ACCESS FULL  | ORDERS       |   105 |   840 |     4  (25)|

|   3 |   TABLE ACCESS FULL  | ORDER_ITEMS  |   665 |  7980 |     4  (25)|

--------------------------------------------------------------------------

ORDERS为HASH TABLE,ORDER_ITEMS扫描

Sort merge join

步骤:将两个表排序,然后将两个表合并。通常情况下,只有在以下情况发生时,才会使用此种JOIN方式:

1.RBO模式

2.不等价关联(>,=,<=,

3.HASH_JOIN_ENABLED=false

4.数据源已排序

cost = (outer access cost * # of hash partitions) + inner access cost

oracle join 嵌套,誰能真正理解hash join/nested loop/merge join相关推荐

  1. oracle hash join outer,CSS_浅谈Oracle中的三种Join方法,基本概念 Nested loop join: Outer - phpStudy...

    浅谈Oracle中的三种Join方法 基本概念 Nested loop join: Outer table中的每一行与inner table中的相应记录join,类似一个嵌套的循环. Sort mer ...

  2. Hash join 和nested loop

    Hash join 和nested loop 总所周知,Oracle数据库常用的两种优化器:RBO(rule-based-optimizer)和CBO(cost-based-optimizer).目前 ...

  3. 理解原理的重要性 - 论PostgreSQL merge join 成本评估陷阱 含case

    背景 PostgreSQL支持三种JOIN的方法,nestloop, merge, hash. 这三种JOIN方法的差别和原理可以参考 https://www.postgresql.org/docs/ ...

  4. Nested Loop Join入门

    Nested Loop Join 之间的表关联是使用索引进行匹配的,假设表 R 和 S 进行连接,其算法伪代码大致如下: for each row r in R with matching condi ...

  5. SQL JOIN --Merge Join

    1概述 Merge join 合并连接.两个集合进行merge join,需要有一个等值的条件,然后需要两个已排序好的集合. 2 one-to-many与many-to-many 2.1 One-to ...

  6. MS SQL SERVER 中merge join合并连接介绍(转)

    1概述 Merge join 合并连接.两个集合进行merge join,需要有一个等值的条件,然后需要两个已排序好的集合. 2 one-to-many与many-to-many 2.1 One-to ...

  7. oracle 非等值关联 优化,Oracle优化器、优化模式、表的连接方式(Hash Join、Nested Loop、Sort Merge Join)...

    查询优化器 Oracle的查询优化器(QO)分为两种: 1. RBO:Ruled-Based Optimization, 基于规则的优化器: 2. CBO :Cost-Based Optimizati ...

  8. SqlServer 算法 :Nested Loops Join(嵌套连接)

    自测试示例, 两表 都没有 建立索引 情况:  start 1.  sql 语句通过 nested loop 连接, 2. 默认 hash join //end-------------------- ...

  9. 多表连接的三种方式详解 HASH JOIN MERGE JOIN NESTED LOOP

    在多表联合查询的时候,如果我们查看它的执行计划,就会发现里面有多表之间的连接方式. 之前打算在sqlplus中用执行计划的,但是格式看起来有点乱,就用Toad 做了3个截图. 从3张图里我们看到了几点 ...

最新文章

  1. JXJJOI2018_T1_market
  2. Uber无人车撞死人,安全员被控过失杀人,算法免于追责
  3. mysql 分页优化
  4. 寄存器分配图着色_富士苹果促进着色技术八大要点!是时候看看了!
  5. openssl windows安装
  6. hnu 暑期实训之选美比赛
  7. jquery可见性过滤选择器:hidden、:visible
  8. 快速破解rar解压密码
  9. 微信小程序常用api
  10. 人工智能(ai)和专家系统(expert system)的区别
  11. 国产之光!Mac必备长截图软件!iShot 1.7.7中文版
  12. 开发一个APP到底要多少钱?
  13. 博客推广——提交搜索引擎
  14. 计算机应用能力考试湖南成绩查询,湖南计算机等级考试成绩查询入口
  15. 学习C#的一点一滴(20)
  16. 阿里云储道深度解析存储系统设计——NVMe SSD性能影响因素一探究竟
  17. Android AB系统ota更新
  18. linux网易云音乐安装失败需要×××依赖
  19. 加拿大的计算机技术专业,详解加拿大计算机专业及相关方向
  20. Java之手写实现ORM框架

热门文章

  1. ant 安装及基础教程 !
  2. oracle11gR2静默安装
  3. 第三届蓝桥杯预赛c++b组
  4. struts2工作原理
  5. 使用logrotate切割nginx日志文件,其他日志文件切割类似
  6. Elasticsearch 的一些关键概念
  7. jquery源码--merge grep type trim
  8. 将switch case转为条件驱动
  9. Spring.NET学习笔记——前言
  10. 通向架构师的道路(第十天)之Axis2 Web Service(一)