31.读书笔记收获不止Oracle之表的合并排序连接
2017-11-06 18:15
453 查看
31.读书笔记收获不止Oracle之表的合并排序连接
测试如下SQL语句
SQL>Alter session set statistics_level=all;
SQL>select /*+ordered use_merge(t2)*/ *from t1,t2 where t1.id=t2.t1_id;
SQL> select * fromtable(dbms_xplan.display_cursor(null,null,'allstats last'));
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID 5jxwkr07a1jdp,child number 1
-------------------------------------
select /*+ordered use_merge(t2)*/ * fromt1,t2 where t1.id=t2.t1_id
Plan hash value: 412793182
--------------------------------------------------------------------------------
---------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buf
fers | OMem| 1Mem | Used-Mem |
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
---------------------------------
| 0| SELECT STATEMENT | | 1 | | 100 |00:00:00.08 |
1012 | | | |
| 1| MERGE JOIN | | 1 | 100 | 100|00:00:00.08 |
1012 | | | |
| 2| SORT JOIN | | 1 | 100 | 100|00:00:00.01 |
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
7| 13312 | 13312 |12288 (0)|
| 3| TABLE ACCESS FULL| T1 | 1 | 100 | 100 |00:00:00.01 |
7| | | |
|* 4| SORT JOIN | | 100 | 118K| 100 |00:00:00.08 |
1005 | 9762K| 1209K| 8677K (0)|
| 5| TABLE ACCESS FULL| T2 | 1 | 118K| 100K|00:00:00.02 |
1005 | | | |
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
---------------------------------
Predicate Information (identified byoperation id):
---------------------------------------------------
4- access("T1"."ID"="T2"."T1_ID")
filter("T1"."ID"="T2"."T1_ID")
Note
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
-----
-dynamic statistics used: dynamic sampling (level=2)
27 rows selected.
从访问次数来看,排序合并连接和HASH链接是一样的,T1表和T2表都只会访问0次或者1次。
有一点需要牢记:排序合并连接根本就没有驱动和被驱动的概念,而嵌套循环和哈希连接要考虑驱动和被驱动的情况。
测试如下SQL语句
SQL>Alter session set statistics_level=all;
SQL>select /*+ordered use_merge(t2)*/ *from t1,t2 where t1.id=t2.t1_id;
SQL> select * fromtable(dbms_xplan.display_cursor(null,null,'allstats last'));
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID 5jxwkr07a1jdp,child number 1
-------------------------------------
select /*+ordered use_merge(t2)*/ * fromt1,t2 where t1.id=t2.t1_id
Plan hash value: 412793182
--------------------------------------------------------------------------------
---------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buf
fers | OMem| 1Mem | Used-Mem |
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
---------------------------------
| 0| SELECT STATEMENT | | 1 | | 100 |00:00:00.08 |
1012 | | | |
| 1| MERGE JOIN | | 1 | 100 | 100|00:00:00.08 |
1012 | | | |
| 2| SORT JOIN | | 1 | 100 | 100|00:00:00.01 |
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
7| 13312 | 13312 |12288 (0)|
| 3| TABLE ACCESS FULL| T1 | 1 | 100 | 100 |00:00:00.01 |
7| | | |
|* 4| SORT JOIN | | 100 | 118K| 100 |00:00:00.08 |
1005 | 9762K| 1209K| 8677K (0)|
| 5| TABLE ACCESS FULL| T2 | 1 | 118K| 100K|00:00:00.02 |
1005 | | | |
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
---------------------------------
Predicate Information (identified byoperation id):
---------------------------------------------------
4- access("T1"."ID"="T2"."T1_ID")
filter("T1"."ID"="T2"."T1_ID")
Note
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
-----
-dynamic statistics used: dynamic sampling (level=2)
27 rows selected.
从访问次数来看,排序合并连接和HASH链接是一样的,T1表和T2表都只会访问0次或者1次。
有一点需要牢记:排序合并连接根本就没有驱动和被驱动的概念,而嵌套循环和哈希连接要考虑驱动和被驱动的情况。
相关文章推荐
- 36.读书笔记收获不止Oracle之表哈希、合并排序连接与索引
- 33.读书笔记收获不止Oracle之表连接的排序分析
- 【读书笔记】【收获,不止Oracle】不同类型下表连接限制的对比
- 29.读书笔记收获不止Oracle之表的循环嵌套连接
- 30.读书笔记收获不止Oracle之表的哈希连接
- 34.读书笔记收获不止Oracle之表连接场景对比
- 35.读书笔记收获不止Oracle之嵌套循环表连接与索引
- 【读书笔记】【收获,不止Oracle】不同连接类型表下,驱动顺序对查询性能的影响
- oracle表连接------>排序合并连接(Merge Sort Join)
- oracle表连接--->排序合并连接
- 7.读书笔记收获不止Oracle之 逻辑体系二 深入与调整
- 20.读书笔记收获不止Oracle之 索引回表和优化
- 37.读书笔记收获不止Oracle之常用诊断命令汇总
- 【读书笔记】【收获,不止Oracle】位图索引(1)
- oracle表连接--->排序合并连接
- 21.读书笔记收获不止Oracle之 索引回表效率
- 【读书笔记】【收获,不止Oracle】哈希连接表(Hash)
- oracle表连接--->排序合并连接
- 22.读书笔记收获不止Oracle之 索引特性活用
- 【读书笔记】【收获,不止Oracle】嵌套循环与索引