笛卡尔积合并连接,两个结果集之间做merge join,并且还是笛卡尔积的合并连接.说起来可能很绕.
我们先看合并连接的定义:通常称为排序合并连接(Sort Merge Join),因为这种连接的要求是:两个结果集是排序的,排序字段是两个结果集的连接字段.

排序合并连接(Sort Merge Join)的执行顺序如下:
1.根据sql文本的where条件,对目标表T1进行访问,对过滤出来的符合where条件的记录按照连接字段进行排序,排好序后的结果集我们记为结果集1
2.根据sql文本的where条件,对目标表T2进行访问,对过滤出来的符合where条件的记录按照连接字段进行排序,排好序后的结果集我们记为结果集2
注意,以上写的是1和2,但是我感觉1和2这两步操作是可以同时进行的.
3.对结果集1和结果集2进行合并操作,从中取出来的匹配的记录是排序合并连接(Sort Merge Join)的最终执行结果.

这个"对结果集1和结果集2进行合并操作"的具体过程,参考崔华的<<基于Oracle的SQL优化>> 第48页
先取出结果集1中的第1条记录,到结果集2中按照连接字段进行匹配,
然后再取出结果集1中的第2条记录,到结果集2中按照连接字段进行匹配
如此反复,直到结果集1中的所有记录遍历完成.

对于排序合并连接(Sort Merge Join)的优缺点及适用场景,也借用崔华的<<基于Oracle的SQL优化>> 第48页

1 通常情况下,排序合并连接(Sort Merge Join)执行效率远不如哈希连接,但是排序合并连接(Sort Merge Join)适用范围更广,
  因为哈希连接只能用于等值连接的where条件,而排序合并连接(Sort Merge Join)还能用于其他的连接条件(如< ,<=,>,>=>)

2.通常情况下,排序合并连接(Sort Merge Join)不适合OLTP系统,因为OLTP系统,排序操作是昂贵的,当然,如果能避免排序,用排序合并连接(Sort Merge Join)也是可以的,
  比如连接字段存在索引的情况下.

3.严格意义上来说,排序合并连接(Sort Merge Join)是不存在驱动表概念的,虽然我个人认为排序合并连接(Sort Merge Join)在执行时,是存在驱动表和被驱动表的.

上面说完了排序合并连接(Sort Merge Join),其实MERGE JOIN CARTESIAN的执行步骤跟上面的步骤差不多:
1.根据sql文本的where条件,对目标表T1进行访问,对过滤出来的符合where条件的记录我们记为结果集1 ---此结果集1可能是排好序的,也可能是不排序的.
2.根据sql文本的where条件,对目标表T2进行访问,对过滤出来的符合where条件的记录我们记为结果集2 ---此结果集2可能是排好序的,也可能是不排序的.
注意,以上写的是1和2,但是我感觉1和2这两步操作是可以同时进行的.

3.对结果集1和结果集2进行合并操作,由于没有关联字段,因此,对于结果集1中的每一条记录,结果集2中的所有记录均满足条件

MERGE JOIN CARTESIAN相关推荐

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

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

  2. TiDB 源码阅读系列文章(十五)Sort Merge Join

    2019独角兽企业重金招聘Python工程师标准>>> 什么是 Sort Merge Join 在开始阅读源码之前, 我们来看看什么是 Sort Merge Join (SMJ),定 ...

  3. SQL JOIN --Merge Join

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

  4. 表的连接方式:NESTED LOOP、HASH JOIN、SORT MERGE JOIN

    表连接方式及使用场合 NESTED LOOP 对于被连接的数据子集较小的情况,nested loop连接是个较好的选择.nested loop就是扫描一个表,每读到一条记录,就根据索引去另一个表里面查 ...

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

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

  6. oracle join 嵌套,誰能真正理解hash join/nested loop/merge join

    关于这三种JOIN的理解.Nested loop join,Hash join,Sort merge join Nested loop join: 步骤:确定一个驱动表(outer table),另一 ...

  7. Nested Loop,Sort Merge Join,Hash Join

    三种连接工作方式比较: Nested loops 工作方式是从一张表中读取数据,访问另一张表(通常是索引)来做匹配,nested loops适用的场合是当一个关联表比较小的时候,效率会更高. Merg ...

  8. Oracle 表的连接方式(1)-----Nested loop join和 Sort merge join

    关系数据库技术的精髓就是通过关系表进行规范化的数据存储,并通过各种表连接技术和各种类型的索引技术来进行信息的检索和处理. 表的三种关联方式: nested loop:从A表抽一条记录,遍历B表查找匹配 ...

  9. 表的连接方式:NESTED LOOP、HASH JOIN、SORT MERGE JOIN【转】

    表连接方式及使用场合 NESTED LOOP 对于被连接的数据子集较小的情况,nested loop连接是个较好的选择.nested loop就是扫描一个表,每读到一条记录,就根据索引去另一个表里面查 ...

  10. left join on or 优化_pandas中merge/join有什么区别?

    越来越多的人学习python,更确切的说是pandas,包中最让人迷惑的是merge 和join,以下将说一说他们之间的区别和联系: 总的来说:pandas.merge()才是老大,merge/joi ...

最新文章

  1. 利用XRDP远程登陆linux系统
  2. linux下获取硬盘使用情况
  3. 需求:整个网站不能出现以下两个链接。思路:检索到网站中凡是出现该链接的都让它的href值为空...
  4. pyspark rdd 基本操作
  5. 汇编64讲(搞免杀、破解必看)
  6. Hadoop源码分析16: IPC流程(11) 整体流程
  7. 屈臣氏供应链数据分析
  8. linux dkms,DKMS简介
  9. 基于SpringBoot+html超市进销存管理系统
  10. 推理悬疑侦探小说大全合集隐私政策
  11. Oracle数据库递归查询
  12. MySQL语法笔记(自用)
  13. 洛谷P2805 [NOI2009] 植物大战僵尸
  14. 【英语-同义词汇词组】common,general,normal,ordinary,usual | often 与 usually的用法及区别
  15. 压缩感知与临近点算子
  16. Ardublockly学习— —安装篇(一)
  17. 通过命令创建vue项目
  18. 【OFDM系列6】MIMO-OFDM系统模型、迫零(ZF)均衡检测和最小均方误差(MMSE)均衡检测原理和公式推导
  19. c# spire.xls 设置文字为微软雅黑_学习 原来Excel文字排版也这样漂亮!
  20. 增值税行业平均税负率参照表

热门文章

  1. 荣耀4a android art,荣耀4A黑科技大揭秘,真是给工程师给跪了!!
  2. Python学习Day3-高级数据类型
  3. php 获取月初月末时间,php一个获取下月月初和月末的函数
  4. Google Earth Engine ——边界线识别!
  5. 【愚公系列】2022年10月 .Net Core使用cpolar内网穿透功能实现钉钉回调事件的监听
  6. 25款操作系统全面接触 [8]
  7. NB物联网之天翼物联(7)——一次性通过电信NB平台自助测试
  8. 云南怎么办理ICP经营许可证?云南办理ICP经营许可证有哪些要求?
  9. AcWing 95. 费解的开关(推理)
  10. 2021最新 阿里云部署 Flask + WSGI + Nginx 详解