oracle表连接--->排序合并连接
来源:互联网 发布:北京金山软件 编辑:程序博客网 时间:2024/06/10 16:33
排序合并连接 (Sort Merge Join)是一种两个表在做连接时用排序操作(Sort)和合并操作(Merge)来得到连接结果集的连接方法。
对于排序合并连接的优缺点及适用场景如下:
a,通常情况下,排序合并连接的执行效率远不如哈希连接,但前者的使用范围更广,因为哈希连接只能用于等值连接条件,而排序合并连接还能用于其他连接条件(如<,<=,>.>=)
b,通常情况下,排序合并连接并不适合OLTP类型的系统,其本质原因是对于因为OLTP类型系统而言,排序是非常昂贵的操作,当然,如果能避免排序操作就例外了。
oracle表之间的连接之排序合并连接(Merge Sort Join),其特点如下:
1,驱动表和被驱动表都是最多只被访问一次。
2,排序合并连接的表无驱动顺序。
3,排序合并连接的表需要排序,用到SORT_AREA_SIZE。
4,排序合并连接不适用于的连接条件是:不等于<>,like,其中大于>,小于<,大于等于>=,小于等于<=,是可以适用于排序合并连接
5,排序合并连接,如果有索引就可以排除排序。
下面我来做个实验来证实如上的结论:
具体的测试基础表请查看本人Blog 如下链接:
oracle表连接之----〉嵌套循环(Nested Loops Join)
SQL> select /*+ ordered use_merge(t2)*/ * from t1,t2 where t1.id=t2.t1_id;
SQL> select sql_id, child_number, sql_text from v$sql where sql_text like '%use_merge%';
SQL_ID CHILD_NUMBER SQL_TEXT
------------- ------------ --------------------------------------------------------------------------------
85u4h9hfqa5ar 0 select sql_id, child_number, sql_text from v$sql where sql_text like '%use_merg
6xph9fhapys39 0 select /*+ ordered use_merge(t2)*/ * from t1,t2 where t1.id=t2.t1_id
SQL> select * from table(dbms_xplan.display_cursor('6xph9fhapys39',0,'allstats last'));
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID 6xph9fhapys39, child number 0
-------------------------------------
select /*+ ordered use_merge(t2)*/ * from t1,t2 where t1.id=t2.t1_id
Plan hash value: 412793182
--------------------------------------------------------------------------------
| Id | Operation | Name | Starts| E-Rows | A-Rows | A-Time | Buf
--------------------------------------------------------------------------------
| 1 | MERGE JOIN | | 1 | 100 | 100 |00:00:00.07 |
| 2 | SORT JOIN | | 1 | 100 | 100 |00:00:00.01 |
| 3 | TABLE ACCESS FULL| T1 | 1 | 100 | 100 |00:00:00.01 |
|* 4 | SORT JOIN | | 100 | 100K| 100 |00:00:00.07 |
| 5 | TABLE ACCESS FULL| T2 | 1 | 100K| 100K|00:00:00.01 |
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
4 - access("T1"."ID"="T2"."T1_ID")
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
filter("T1"."ID"="T2"."T1_ID")
Note
-----
- dynamic sampling used for this statement
26 rows selected
从上面的实验可以看出排序合并连接和HASH连接时一样的,T1和T2 表都只会被访问0次或者1次。
select /*+ ordered use_merge(t2)*/ * from t1,t2 where t1.id=t2.t1_id and 1=2;此语句T1和T2表就会是被访问0次。自己可以做试验测试下。
- oracle表连接--->排序合并连接
- oracle表连接------>排序合并连接(Merge Sort Join)
- oracle 表连接 - sort merge joins 排序合并连接
- oracle表连接------>排序合并连接(Merge Sort Join)
- Oracle表连接操作——Merge Sort Join(合并排序连接)
- Oracle表连接操作——Merge Sort Join(合并排序连接)
- 表连接三剑客(嵌套循环连接,哈希连接,排序合并连接)
- 31.读书笔记收获不止Oracle之表的合并排序连接
- Oracle 表连接 导致排序错乱
- 合并排序连接(Merge Sort Join)-1
- 合并排序连接(Merge Sort Join)-2
- 36.读书笔记收获不止Oracle之表哈希、合并排序连接与索引
- Oracle:连接合并列的输出
- Oracle 多行记录合并/连接/聚合字符串(合并内容)
- 关于嵌套循环连接,排序合并连接,和哈希连接
- Oracle面试题 表连接 高级排序函数
- 排序合并连接(sort merge join)的原理
- 排序合并连接(sort merge join)的原理
- java版的yaml 解析器,试试jyaml
- 利用secureCRT中实现windows和linux的文件互传
- Android Framework 分析---2消息机制Native层
- 简单的Apache服务器配置
- 中石油出售千亿资产背后暗藏啥玄机?
- oracle表连接--->排序合并连接
- VB6 shell 打印
- cocos2d-x中使图片背景全透明(另一种方法)
- POJ 2375 Cow Ski Area 强连通
- 对于互联网金融大战,第三方基金销售也成了参与者 数米、好买接连参战
- Eclipse关联JDK源码
- 关于 MongoDB 你需要知道的几件事
- 序列化和反序列化
- 树的基本实现