[FEAT MERGE]logical plan move to plan cache module add feedback into to plan
This commit is contained in:
@ -11,19 +11,19 @@ select /*+ USE_PX parallel(3) */* from
|
||||
(select c1,count(c2) c2 from t1 group by c1)c) a join
|
||||
(select c1,count(*) c2 from t2 group by c1)b on a.c1=b.c1 ;
|
||||
Query Plan
|
||||
===========================================
|
||||
|ID|OPERATOR |NAME |
|
||||
-------------------------------------------
|
||||
|0 |PX COORDINATOR | |
|
||||
|1 | EXCHANGE OUT DISTR |:EX10001|
|
||||
|2 | HASH JOIN | |
|
||||
|3 | PX PARTITION ITERATOR | |
|
||||
|4 | TABLE SCAN |t1 |
|
||||
|5 | EXCHANGE IN DISTR | |
|
||||
|6 | EXCHANGE OUT DISTR (PKEY)|:EX10000|
|
||||
|7 | PX BLOCK ITERATOR | |
|
||||
|8 | TABLE SCAN |t2 |
|
||||
===========================================
|
||||
===============================================
|
||||
|ID|OPERATOR |NAME |
|
||||
-----------------------------------------------
|
||||
|0 |PX COORDINATOR | |
|
||||
|1 |└─EXCHANGE OUT DISTR |:EX10001|
|
||||
|2 | └─HASH JOIN | |
|
||||
|3 | ├─PX PARTITION ITERATOR | |
|
||||
|4 | │ └─TABLE FULL SCAN |t1 |
|
||||
|5 | └─EXCHANGE IN DISTR | |
|
||||
|6 | └─EXCHANGE OUT DISTR (PKEY)|:EX10000|
|
||||
|7 | └─PX BLOCK ITERATOR | |
|
||||
|8 | └─TABLE FULL SCAN |t2 |
|
||||
===============================================
|
||||
Outputs & filters:
|
||||
-------------------------------------
|
||||
0 - output([INTERNAL_FUNCTION(t1.c1, 1, t2.c1, 1)]), filter(nil), rowset=256
|
||||
@ -63,24 +63,24 @@ c1 c2 c1 c2
|
||||
explain basic
|
||||
select a.c2,count(*) from (select /*+ USE_PX parallel(3) PQ_DISTRIBUTE(b HASH HASH) */a.c1,a.c2,b.c1 c3,b.c2 c4 from t1 a join t2 b on a.c1=b.c1)a group by a.c2;
|
||||
Query Plan
|
||||
==================================================
|
||||
|ID|OPERATOR |NAME |
|
||||
--------------------------------------------------
|
||||
|0 |PX COORDINATOR | |
|
||||
|1 | EXCHANGE OUT DISTR |:EX10002|
|
||||
|2 | HASH GROUP BY | |
|
||||
|3 | EXCHANGE IN DISTR | |
|
||||
|4 | EXCHANGE OUT DISTR (HASH) |:EX10001|
|
||||
|5 | HASH GROUP BY | |
|
||||
|6 | HASH JOIN | |
|
||||
|7 | PART JOIN FILTER CREATE |:BF0000 |
|
||||
|8 | EXCHANGE IN DISTR | |
|
||||
|9 | EXCHANGE OUT DISTR (PKEY) |:EX10000|
|
||||
|10| PX BLOCK ITERATOR | |
|
||||
|11| TABLE SCAN |b |
|
||||
|12| PX PARTITION HASH JOIN-FILTER|:BF0000 |
|
||||
|13| TABLE SCAN |a |
|
||||
==================================================
|
||||
=========================================================
|
||||
|ID|OPERATOR |NAME |
|
||||
---------------------------------------------------------
|
||||
|0 |PX COORDINATOR | |
|
||||
|1 |└─EXCHANGE OUT DISTR |:EX10002|
|
||||
|2 | └─HASH GROUP BY | |
|
||||
|3 | └─EXCHANGE IN DISTR | |
|
||||
|4 | └─EXCHANGE OUT DISTR (HASH) |:EX10001|
|
||||
|5 | └─HASH GROUP BY | |
|
||||
|6 | └─HASH JOIN | |
|
||||
|7 | ├─PART JOIN FILTER CREATE |:BF0000 |
|
||||
|8 | │ └─EXCHANGE IN DISTR | |
|
||||
|9 | │ └─EXCHANGE OUT DISTR (PKEY)|:EX10000|
|
||||
|10| │ └─PX BLOCK ITERATOR | |
|
||||
|11| │ └─TABLE FULL SCAN |b |
|
||||
|12| └─PX PARTITION HASH JOIN-FILTER|:BF0000 |
|
||||
|13| └─TABLE FULL SCAN |a |
|
||||
=========================================================
|
||||
Outputs & filters:
|
||||
-------------------------------------
|
||||
0 - output([INTERNAL_FUNCTION(a.c2, T_FUN_COUNT_SUM(T_FUN_COUNT(*)))]), filter(nil), rowset=256
|
||||
|
||||
@ -3,31 +3,31 @@ create table t1 (c1 int, c2 int, c3 int);
|
||||
create table t2 (c1 int, c2 int, c3 int);
|
||||
explain select /*+ use_px parallel(2) use_hash(c d) */ * from (select a.c2, b.c3 from (select /*+ use_hash(a, b) */ c1, c2, count(*) c3 from t1 group by 1, 2) a, (select c1, c2, count(*) c3 from t1 group by 1, 2) b where a.c1 = b.c1) c, (select c1, c2, count(*) c3 from t1 group by 1, 2) d where c.c2 = d.c2;
|
||||
Query Plan
|
||||
============================================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
----------------------------------------------------------------------------
|
||||
|0 |TEMP TABLE TRANSFORMATION | |1 |5 |
|
||||
|1 | PX COORDINATOR | |1 |4 |
|
||||
|2 | EXCHANGE OUT DISTR |:EX10001 |1 |4 |
|
||||
|3 | TEMP TABLE INSERT |TEMP1 |1 |3 |
|
||||
|4 | HASH GROUP BY | |1 |3 |
|
||||
|5 | EXCHANGE IN DISTR | |2 |3 |
|
||||
|6 | EXCHANGE OUT DISTR (HASH) |:EX10000 |2 |3 |
|
||||
|7 | HASH GROUP BY | |2 |2 |
|
||||
|8 | PX BLOCK ITERATOR | |1 |1 |
|
||||
|9 | TABLE SCAN |t1 |1 |1 |
|
||||
|10| PX COORDINATOR | |1 |2 |
|
||||
|11| EXCHANGE OUT DISTR |:EX20002 |1 |2 |
|
||||
|12| SHARED HASH JOIN | |1 |1 |
|
||||
|13| EXCHANGE IN DISTR | |1 |1 |
|
||||
|14| EXCHANGE OUT DISTR (BC2HOST) |:EX20001 |1 |1 |
|
||||
|15| SHARED HASH JOIN | |1 |1 |
|
||||
|16| EXCHANGE IN DISTR | |1 |1 |
|
||||
|17| EXCHANGE OUT DISTR (BC2HOST)|:EX20000 |1 |1 |
|
||||
|18| TEMP TABLE ACCESS |VIEW2(TEMP1)|1 |1 |
|
||||
|19| TEMP TABLE ACCESS |VIEW3(TEMP1)|1 |1 |
|
||||
|20| TEMP TABLE ACCESS |VIEW1(TEMP1)|1 |1 |
|
||||
============================================================================
|
||||
====================================================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
------------------------------------------------------------------------------------
|
||||
|0 |TEMP TABLE TRANSFORMATION | |1 |5 |
|
||||
|1 |├─PX COORDINATOR | |1 |4 |
|
||||
|2 |│ └─EXCHANGE OUT DISTR |:EX10001 |1 |4 |
|
||||
|3 |│ └─TEMP TABLE INSERT |TEMP1 |1 |3 |
|
||||
|4 |│ └─HASH GROUP BY | |1 |3 |
|
||||
|5 |│ └─EXCHANGE IN DISTR | |2 |3 |
|
||||
|6 |│ └─EXCHANGE OUT DISTR (HASH) |:EX10000 |2 |3 |
|
||||
|7 |│ └─HASH GROUP BY | |2 |2 |
|
||||
|8 |│ └─PX BLOCK ITERATOR | |1 |1 |
|
||||
|9 |│ └─TABLE FULL SCAN |t1 |1 |1 |
|
||||
|10|└─PX COORDINATOR | |1 |2 |
|
||||
|11| └─EXCHANGE OUT DISTR |:EX20002 |1 |2 |
|
||||
|12| └─SHARED HASH JOIN | |1 |1 |
|
||||
|13| ├─EXCHANGE IN DISTR | |1 |1 |
|
||||
|14| │ └─EXCHANGE OUT DISTR (BC2HOST) |:EX20001 |1 |1 |
|
||||
|15| │ └─SHARED HASH JOIN | |1 |1 |
|
||||
|16| │ ├─EXCHANGE IN DISTR | |1 |1 |
|
||||
|17| │ │ └─EXCHANGE OUT DISTR (BC2HOST)|:EX20000 |1 |1 |
|
||||
|18| │ │ └─TEMP TABLE ACCESS |VIEW2(TEMP1)|1 |1 |
|
||||
|19| │ └─TEMP TABLE ACCESS |VIEW3(TEMP1)|1 |1 |
|
||||
|20| └─TEMP TABLE ACCESS |VIEW1(TEMP1)|1 |1 |
|
||||
====================================================================================
|
||||
Outputs & filters:
|
||||
-------------------------------------
|
||||
0 - output([VIEW2.t1.c2], [VIEW3.T_FUN_COUNT(*)], [VIEW1.t1.c1], [VIEW1.t1.c2], [VIEW1.T_FUN_COUNT(*)]), filter(nil), rowset=256
|
||||
@ -68,30 +68,30 @@ Outputs & filters:
|
||||
access([VIEW1.T_FUN_COUNT(*)], [VIEW1.t1.c1], [VIEW1.t1.c2])
|
||||
explain select /*+ use_px parallel(2) use_merge(a b) */ b.c2, sum(a.c3) from (select /*+ NO_USE_HASH_AGGREGATION */ c1, c2, count(*) c3 from t1 group by 1, 2) a, t2 b where a.c1 = b.c1 group by 1;
|
||||
Query Plan
|
||||
=========================================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
-------------------------------------------------------------------------
|
||||
|0 |PX COORDINATOR | |1 |5 |
|
||||
|1 | EXCHANGE OUT DISTR |:EX10003|1 |5 |
|
||||
|2 | HASH GROUP BY | |1 |5 |
|
||||
|3 | EXCHANGE IN DISTR | |2 |5 |
|
||||
|4 | EXCHANGE OUT DISTR (HASH) |:EX10002|2 |4 |
|
||||
|5 | HASH GROUP BY | |2 |4 |
|
||||
|6 | SUBPLAN SCAN |VIEW1 |1 |3 |
|
||||
|7 | MERGE GROUP BY | |1 |3 |
|
||||
|8 | PARTITION SORT | |1 |3 |
|
||||
|9 | MERGE JOIN | |1 |3 |
|
||||
|10| SORT | |1 |2 |
|
||||
|11| EXCHANGE IN DISTR | |1 |2 |
|
||||
|12| EXCHANGE OUT DISTR (HASH)|:EX10000|1 |2 |
|
||||
|13| PX BLOCK ITERATOR | |1 |1 |
|
||||
|14| TABLE SCAN |b |1 |1 |
|
||||
|15| SORT | |1 |2 |
|
||||
|16| EXCHANGE IN DISTR | |1 |2 |
|
||||
|17| EXCHANGE OUT DISTR (HASH)|:EX10001|1 |2 |
|
||||
|18| PX BLOCK ITERATOR | |1 |1 |
|
||||
|19| TABLE SCAN |t1 |1 |1 |
|
||||
=========================================================================
|
||||
=====================================================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
-------------------------------------------------------------------------------------
|
||||
|0 |PX COORDINATOR | |1 |5 |
|
||||
|1 |└─EXCHANGE OUT DISTR |:EX10003|1 |5 |
|
||||
|2 | └─HASH GROUP BY | |1 |5 |
|
||||
|3 | └─EXCHANGE IN DISTR | |2 |5 |
|
||||
|4 | └─EXCHANGE OUT DISTR (HASH) |:EX10002|2 |4 |
|
||||
|5 | └─HASH GROUP BY | |2 |4 |
|
||||
|6 | └─SUBPLAN SCAN |VIEW1 |1 |3 |
|
||||
|7 | └─MERGE GROUP BY | |1 |3 |
|
||||
|8 | └─PARTITION SORT | |1 |3 |
|
||||
|9 | └─MERGE JOIN | |1 |3 |
|
||||
|10| ├─SORT | |1 |2 |
|
||||
|11| │ └─EXCHANGE IN DISTR | |1 |2 |
|
||||
|12| │ └─EXCHANGE OUT DISTR (HASH)|:EX10000|1 |2 |
|
||||
|13| │ └─PX BLOCK ITERATOR | |1 |1 |
|
||||
|14| │ └─TABLE FULL SCAN |b |1 |1 |
|
||||
|15| └─SORT | |1 |2 |
|
||||
|16| └─EXCHANGE IN DISTR | |1 |2 |
|
||||
|17| └─EXCHANGE OUT DISTR (HASH)|:EX10001|1 |2 |
|
||||
|18| └─PX BLOCK ITERATOR | |1 |1 |
|
||||
|19| └─TABLE FULL SCAN |t1 |1 |1 |
|
||||
=====================================================================================
|
||||
Outputs & filters:
|
||||
-------------------------------------
|
||||
0 - output([INTERNAL_FUNCTION(VIEW1.b.c2, T_FUN_SUM(T_FUN_SUM(VIEW1.a.c3)))]), filter(nil), rowset=256
|
||||
@ -135,25 +135,25 @@ Outputs & filters:
|
||||
range_key([t1.__pk_increment]), range(MIN ; MAX)always true
|
||||
explain select /*+ use_px parallel(2) use_merge(a b) */ * from (select /*+ NO_USE_HASH_AGGREGATION */ c1, c2, count(*) c3 from t1 group by 1, 2) a, t2 b where a.c1 = b.c1;
|
||||
Query Plan
|
||||
====================================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
--------------------------------------------------------------------
|
||||
|0 |PX COORDINATOR | |1 |5 |
|
||||
|1 | EXCHANGE OUT DISTR |:EX10002|1 |4 |
|
||||
|2 | MERGE GROUP BY | |1 |4 |
|
||||
|3 | PARTITION SORT | |1 |4 |
|
||||
|4 | MERGE JOIN | |1 |4 |
|
||||
|5 | SORT | |1 |2 |
|
||||
|6 | EXCHANGE IN DISTR | |1 |2 |
|
||||
|7 | EXCHANGE OUT DISTR (HASH)|:EX10000|1 |2 |
|
||||
|8 | PX BLOCK ITERATOR | |1 |1 |
|
||||
|9 | TABLE SCAN |t1 |1 |1 |
|
||||
|10| SORT | |1 |2 |
|
||||
|11| EXCHANGE IN DISTR | |1 |2 |
|
||||
|12| EXCHANGE OUT DISTR (HASH)|:EX10001|1 |2 |
|
||||
|13| PX BLOCK ITERATOR | |1 |1 |
|
||||
|14| TABLE SCAN |b |1 |1 |
|
||||
====================================================================
|
||||
===========================================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
---------------------------------------------------------------------------
|
||||
|0 |PX COORDINATOR | |1 |5 |
|
||||
|1 |└─EXCHANGE OUT DISTR |:EX10002|1 |4 |
|
||||
|2 | └─MERGE GROUP BY | |1 |4 |
|
||||
|3 | └─PARTITION SORT | |1 |4 |
|
||||
|4 | └─MERGE JOIN | |1 |4 |
|
||||
|5 | ├─SORT | |1 |2 |
|
||||
|6 | │ └─EXCHANGE IN DISTR | |1 |2 |
|
||||
|7 | │ └─EXCHANGE OUT DISTR (HASH)|:EX10000|1 |2 |
|
||||
|8 | │ └─PX BLOCK ITERATOR | |1 |1 |
|
||||
|9 | │ └─TABLE FULL SCAN |t1 |1 |1 |
|
||||
|10| └─SORT | |1 |2 |
|
||||
|11| └─EXCHANGE IN DISTR | |1 |2 |
|
||||
|12| └─EXCHANGE OUT DISTR (HASH)|:EX10001|1 |2 |
|
||||
|13| └─PX BLOCK ITERATOR | |1 |1 |
|
||||
|14| └─TABLE FULL SCAN |b |1 |1 |
|
||||
===========================================================================
|
||||
Outputs & filters:
|
||||
-------------------------------------
|
||||
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, T_FUN_COUNT(*), b.c1, b.c2, b.c3)]), filter(nil), rowset=256
|
||||
|
||||
@ -7,14 +7,14 @@ create table t1 (c1 int(11) not null, c2 int(11) not null, c3 int(11) not null,
|
||||
|
||||
explain select * from t1;
|
||||
Query Plan
|
||||
===========================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
-----------------------------------------------------------
|
||||
|0 |PX COORDINATOR | |1 |9 |
|
||||
|1 | EXCHANGE OUT DISTR |:EX10000|1 |8 |
|
||||
|2 | PX PARTITION ITERATOR| |1 |7 |
|
||||
|3 | TABLE SCAN |t1 |1 |7 |
|
||||
===========================================================
|
||||
=============================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
-------------------------------------------------------------
|
||||
|0 |PX COORDINATOR | |1 |9 |
|
||||
|1 |└─EXCHANGE OUT DISTR |:EX10000|1 |8 |
|
||||
|2 | └─PX PARTITION ITERATOR| |1 |7 |
|
||||
|3 | └─TABLE FULL SCAN |t1 |1 |7 |
|
||||
=============================================================
|
||||
Outputs & filters:
|
||||
-------------------------------------
|
||||
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t1.c3)]), filter(nil), rowset=256
|
||||
@ -28,14 +28,14 @@ Outputs & filters:
|
||||
range_key([t1.c1], [t1.c2], [t1.c3]), range(MIN,MIN,MIN ; MAX,MAX,MAX)always true
|
||||
explain select /*+use_px*/ * from t1;
|
||||
Query Plan
|
||||
===========================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
-----------------------------------------------------------
|
||||
|0 |PX COORDINATOR | |1 |9 |
|
||||
|1 | EXCHANGE OUT DISTR |:EX10000|1 |8 |
|
||||
|2 | PX PARTITION ITERATOR| |1 |7 |
|
||||
|3 | TABLE SCAN |t1 |1 |7 |
|
||||
===========================================================
|
||||
=============================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
-------------------------------------------------------------
|
||||
|0 |PX COORDINATOR | |1 |9 |
|
||||
|1 |└─EXCHANGE OUT DISTR |:EX10000|1 |8 |
|
||||
|2 | └─PX PARTITION ITERATOR| |1 |7 |
|
||||
|3 | └─TABLE FULL SCAN |t1 |1 |7 |
|
||||
=============================================================
|
||||
Outputs & filters:
|
||||
-------------------------------------
|
||||
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t1.c3)]), filter(nil), rowset=256
|
||||
@ -49,14 +49,14 @@ Outputs & filters:
|
||||
range_key([t1.c1], [t1.c2], [t1.c3]), range(MIN,MIN,MIN ; MAX,MAX,MAX)always true
|
||||
explain select /*+use_px parallel(15)*/ * from t1;
|
||||
Query Plan
|
||||
=======================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
-------------------------------------------------------
|
||||
|0 |PX COORDINATOR | |1 |1 |
|
||||
|1 | EXCHANGE OUT DISTR|:EX10000|1 |1 |
|
||||
|2 | PX BLOCK ITERATOR| |1 |1 |
|
||||
|3 | TABLE SCAN |t1 |1 |1 |
|
||||
=======================================================
|
||||
=========================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
---------------------------------------------------------
|
||||
|0 |PX COORDINATOR | |1 |1 |
|
||||
|1 |└─EXCHANGE OUT DISTR |:EX10000|1 |1 |
|
||||
|2 | └─PX BLOCK ITERATOR| |1 |1 |
|
||||
|3 | └─TABLE FULL SCAN|t1 |1 |1 |
|
||||
=========================================================
|
||||
Outputs & filters:
|
||||
-------------------------------------
|
||||
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t1.c3)]), filter(nil), rowset=256
|
||||
@ -69,14 +69,14 @@ Outputs & filters:
|
||||
range_key([t1.c1], [t1.c2], [t1.c3]), range(MIN,MIN,MIN ; MAX,MAX,MAX)always true
|
||||
explain select /*+no_use_px */ * from t1;
|
||||
Query Plan
|
||||
===========================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
-----------------------------------------------------------
|
||||
|0 |PX COORDINATOR | |1 |9 |
|
||||
|1 | EXCHANGE OUT DISTR |:EX10000|1 |8 |
|
||||
|2 | PX PARTITION ITERATOR| |1 |7 |
|
||||
|3 | TABLE SCAN |t1 |1 |7 |
|
||||
===========================================================
|
||||
=============================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
-------------------------------------------------------------
|
||||
|0 |PX COORDINATOR | |1 |9 |
|
||||
|1 |└─EXCHANGE OUT DISTR |:EX10000|1 |8 |
|
||||
|2 | └─PX PARTITION ITERATOR| |1 |7 |
|
||||
|3 | └─TABLE FULL SCAN |t1 |1 |7 |
|
||||
=============================================================
|
||||
Outputs & filters:
|
||||
-------------------------------------
|
||||
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t1.c3)]), filter(nil), rowset=256
|
||||
@ -90,14 +90,14 @@ Outputs & filters:
|
||||
range_key([t1.c1], [t1.c2], [t1.c3]), range(MIN,MIN,MIN ; MAX,MAX,MAX)always true
|
||||
explain select /*+no_use_px use_px*/ * from t1;
|
||||
Query Plan
|
||||
===========================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
-----------------------------------------------------------
|
||||
|0 |PX COORDINATOR | |1 |9 |
|
||||
|1 | EXCHANGE OUT DISTR |:EX10000|1 |8 |
|
||||
|2 | PX PARTITION ITERATOR| |1 |7 |
|
||||
|3 | TABLE SCAN |t1 |1 |7 |
|
||||
===========================================================
|
||||
=============================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
-------------------------------------------------------------
|
||||
|0 |PX COORDINATOR | |1 |9 |
|
||||
|1 |└─EXCHANGE OUT DISTR |:EX10000|1 |8 |
|
||||
|2 | └─PX PARTITION ITERATOR| |1 |7 |
|
||||
|3 | └─TABLE FULL SCAN |t1 |1 |7 |
|
||||
=============================================================
|
||||
Outputs & filters:
|
||||
-------------------------------------
|
||||
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t1.c3)]), filter(nil), rowset=256
|
||||
@ -111,14 +111,14 @@ Outputs & filters:
|
||||
range_key([t1.c1], [t1.c2], [t1.c3]), range(MIN,MIN,MIN ; MAX,MAX,MAX)always true
|
||||
explain select /*+use_px no_use_px */ * from t1;
|
||||
Query Plan
|
||||
===========================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
-----------------------------------------------------------
|
||||
|0 |PX COORDINATOR | |1 |9 |
|
||||
|1 | EXCHANGE OUT DISTR |:EX10000|1 |8 |
|
||||
|2 | PX PARTITION ITERATOR| |1 |7 |
|
||||
|3 | TABLE SCAN |t1 |1 |7 |
|
||||
===========================================================
|
||||
=============================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
-------------------------------------------------------------
|
||||
|0 |PX COORDINATOR | |1 |9 |
|
||||
|1 |└─EXCHANGE OUT DISTR |:EX10000|1 |8 |
|
||||
|2 | └─PX PARTITION ITERATOR| |1 |7 |
|
||||
|3 | └─TABLE FULL SCAN |t1 |1 |7 |
|
||||
=============================================================
|
||||
Outputs & filters:
|
||||
-------------------------------------
|
||||
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t1.c3)]), filter(nil), rowset=256
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -70,18 +70,18 @@ insert into score values
|
||||
(64, 'MA', 87);
|
||||
explain select /*+ USE_PX parallel(2) */ * from stu, score where stu.sid = score.sid order by score.sid;
|
||||
Query Plan
|
||||
==============================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
--------------------------------------------------------------
|
||||
|0 |PX COORDINATOR MERGE SORT | |1 |13 |
|
||||
|1 | EXCHANGE OUT DISTR |:EX10000|1 |12 |
|
||||
|2 | SORT | |1 |11 |
|
||||
|3 | PX PARTITION ITERATOR | |1 |11 |
|
||||
|4 | MERGE JOIN | |1 |11 |
|
||||
|5 | TABLE SCAN |score |1 |6 |
|
||||
|6 | SORT | |1 |6 |
|
||||
|7 | TABLE SCAN |stu |1 |6 |
|
||||
==============================================================
|
||||
===============================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
---------------------------------------------------------------
|
||||
|0 |PX COORDINATOR MERGE SORT | |1 |13 |
|
||||
|1 |└─EXCHANGE OUT DISTR |:EX10000|1 |12 |
|
||||
|2 | └─SORT | |1 |11 |
|
||||
|3 | └─PX PARTITION ITERATOR| |1 |11 |
|
||||
|4 | └─MERGE JOIN | |1 |11 |
|
||||
|5 | ├─TABLE FULL SCAN |score |1 |6 |
|
||||
|6 | └─SORT | |1 |6 |
|
||||
|7 | └─TABLE FULL SCAN|stu |1 |6 |
|
||||
===============================================================
|
||||
Outputs & filters:
|
||||
-------------------------------------
|
||||
0 - output([INTERNAL_FUNCTION(stu.sid, stu.name, stu.cls, score.sid, score.subject, score.score)]), filter(nil), rowset=256
|
||||
|
||||
@ -70,27 +70,27 @@ insert into score values
|
||||
(64, 'MA', 87);
|
||||
explain select /*+ USE_PX parallel(2) */ * from stu, score where stu.sid != score.sid and stu.sid < 12;
|
||||
Query Plan
|
||||
=======================================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
-----------------------------------------------------------------------
|
||||
|0 |PX COORDINATOR | |0 |11 |
|
||||
|1 | EXCHANGE OUT DISTR |:EX10001|0 |11 |
|
||||
|2 | NESTED-LOOP JOIN | |0 |11 |
|
||||
|3 | PX BLOCK ITERATOR | |1 |6 |
|
||||
|4 | TABLE SCAN |score |1 |6 |
|
||||
|5 | MATERIAL | |1 |6 |
|
||||
|6 | EXCHANGE IN DISTR | |1 |6 |
|
||||
|7 | EXCHANGE OUT DISTR (BROADCAST)|:EX10000|1 |6 |
|
||||
|8 | PX BLOCK ITERATOR | |1 |6 |
|
||||
|9 | TABLE SCAN |stu |1 |6 |
|
||||
=======================================================================
|
||||
============================================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
----------------------------------------------------------------------------
|
||||
|0 |PX COORDINATOR | |0 |11 |
|
||||
|1 |└─EXCHANGE OUT DISTR |:EX10001|0 |11 |
|
||||
|2 | └─NESTED-LOOP JOIN | |0 |11 |
|
||||
|3 | ├─PX BLOCK ITERATOR | |1 |6 |
|
||||
|4 | │ └─TABLE FULL SCAN |score |1 |6 |
|
||||
|5 | └─MATERIAL | |1 |6 |
|
||||
|6 | └─EXCHANGE IN DISTR | |1 |6 |
|
||||
|7 | └─EXCHANGE OUT DISTR (BROADCAST)|:EX10000|1 |6 |
|
||||
|8 | └─PX BLOCK ITERATOR | |1 |6 |
|
||||
|9 | └─TABLE FULL SCAN |stu |1 |6 |
|
||||
============================================================================
|
||||
Outputs & filters:
|
||||
-------------------------------------
|
||||
0 - output([INTERNAL_FUNCTION(stu.sid, stu.name, stu.cls, score.sid, score.subject, score.score)]), filter(nil), rowset=256
|
||||
1 - output([INTERNAL_FUNCTION(stu.sid, stu.name, stu.cls, score.sid, score.subject, score.score)]), filter(nil), rowset=256
|
||||
dop=2
|
||||
2 - output([stu.sid], [score.sid], [score.subject], [score.score], [stu.cls], [stu.name]), filter(nil), rowset=256
|
||||
conds([stu.sid != score.sid]), nl_params_(nil), batch_join=false
|
||||
conds([stu.sid != score.sid]), nl_params_(nil), use_batch=false
|
||||
3 - output([score.sid], [score.subject], [score.score]), filter(nil), rowset=256
|
||||
4 - output([score.sid], [score.subject], [score.score]), filter(nil), rowset=256
|
||||
access([score.sid], [score.subject], [score.score]), partitions(p[0-5])
|
||||
@ -135,19 +135,19 @@ sid name cls sid subject score
|
||||
11 a1 1 64 MA 87
|
||||
explain select /*+ USE_PX parallel(2) */ * from score, teacher where teacher.subject = score.subject and teacher.tid = 1;
|
||||
Query Plan
|
||||
====================================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
--------------------------------------------------------------------
|
||||
|0 |PX COORDINATOR | |1 |10 |
|
||||
|1 | EXCHANGE OUT DISTR |:EX10001|1 |9 |
|
||||
|2 | SHARED HASH JOIN | |1 |8 |
|
||||
|3 | EXCHANGE IN DISTR | |1 |6 |
|
||||
|4 | EXCHANGE OUT DISTR (BC2HOST)|:EX10000|1 |6 |
|
||||
|5 | PX BLOCK ITERATOR | |1 |6 |
|
||||
|6 | TABLE SCAN |score |1 |6 |
|
||||
|7 | PX BLOCK ITERATOR | |1 |2 |
|
||||
|8 | TABLE GET |teacher |1 |2 |
|
||||
====================================================================
|
||||
========================================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
------------------------------------------------------------------------
|
||||
|0 |PX COORDINATOR | |1 |10 |
|
||||
|1 |└─EXCHANGE OUT DISTR |:EX10001|1 |9 |
|
||||
|2 | └─SHARED HASH JOIN | |1 |8 |
|
||||
|3 | ├─EXCHANGE IN DISTR | |1 |6 |
|
||||
|4 | │ └─EXCHANGE OUT DISTR (BC2HOST)|:EX10000|1 |6 |
|
||||
|5 | │ └─PX BLOCK ITERATOR | |1 |6 |
|
||||
|6 | │ └─TABLE FULL SCAN |score |1 |6 |
|
||||
|7 | └─PX BLOCK ITERATOR | |1 |2 |
|
||||
|8 | └─TABLE GET |teacher |1 |2 |
|
||||
========================================================================
|
||||
Outputs & filters:
|
||||
-------------------------------------
|
||||
0 - output([INTERNAL_FUNCTION(score.sid, score.subject, score.score, teacher.tid, teacher.name, teacher.subject)]), filter(nil), rowset=256
|
||||
|
||||
@ -70,17 +70,17 @@ insert into score values
|
||||
(64, 'MA', 87);
|
||||
explain select /*+ USE_PX parallel(2) */ * from stu, score where stu.sid = score.sid;
|
||||
Query Plan
|
||||
===========================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
-----------------------------------------------------------
|
||||
|0 |PX COORDINATOR | |1 |13 |
|
||||
|1 | EXCHANGE OUT DISTR |:EX10000|1 |12 |
|
||||
|2 | PX PARTITION ITERATOR| |1 |11 |
|
||||
|3 | MERGE JOIN | |1 |11 |
|
||||
|4 | TABLE SCAN |score |1 |6 |
|
||||
|5 | SORT | |1 |6 |
|
||||
|6 | TABLE SCAN |stu |1 |6 |
|
||||
===========================================================
|
||||
=============================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
-------------------------------------------------------------
|
||||
|0 |PX COORDINATOR | |1 |13 |
|
||||
|1 |└─EXCHANGE OUT DISTR |:EX10000|1 |12 |
|
||||
|2 | └─PX PARTITION ITERATOR| |1 |11 |
|
||||
|3 | └─MERGE JOIN | |1 |11 |
|
||||
|4 | ├─TABLE FULL SCAN |score |1 |6 |
|
||||
|5 | └─SORT | |1 |6 |
|
||||
|6 | └─TABLE FULL SCAN|stu |1 |6 |
|
||||
=============================================================
|
||||
Outputs & filters:
|
||||
-------------------------------------
|
||||
0 - output([INTERNAL_FUNCTION(stu.sid, stu.name, stu.cls, score.sid, score.subject, score.score)]), filter(nil), rowset=256
|
||||
|
||||
Reference in New Issue
Block a user