MERGE JOIN CARTESIAN
来源:互联网 发布:erp软件什么意思 编辑:程序博客网 时间:2024/06/05 23:52
笛卡尔积合并连接,两个结果集之间做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这两步操作是可以同时进行的.
我们先看合并连接的定义:通常称为排序合并连接(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中的所有记录均满足条件
阅读全文
0 0
- MERGE JOIN CARTESIAN
- 关于MERGE JOIN CARTESIAN
- 关于MERGE JOIN CARTESIAN
- MERGE JOIN CARTESIAN
- Oracle中的merge join Cartesian
- 要命的MERGE JOIN CARTESIAN
- MERGE JOIN CARTESIAN处理一例
- merge join cartesian产生的一种情况
- 统计信息未收集引发的MERGE JOIN CARTESIAN
- MERGE JOIN CARTESIAN 优化…
- sql调优之执行计划之笛卡尔连接————MERGE JOIN CARTESIAN
- merge semi join and merge anti join
- hash join VS merge join
- sort merge join,hash join,netsloop join
- {LOOP | MERGE | HASH } JOIN
- Merge 与Left join
- pandas join merge
- Merge, join, and concatenate
- RTP协议分析
- Java【集合系列】-10-HashMap详细介绍(源码解析)和使用示例
- mybatis 动态sql讲解与示例分析
- LeetCode(2) Add Two Numbers
- sqlmap教程
- MERGE JOIN CARTESIAN
- maven自建maven 报Could not find artifact
- textraex 失焦
- iOS原生播放器
- 大学应届毕业生应聘java工程师怎样应对面试官的提问?
- 无向图欧拉回路模板
- elasticsearch java 基于 RestClientAPI 的增删改查
- Spark 提供的概率与统计算法
- servlet 3.0 文件上传下载