[FEAT MERGE]logical plan move to plan cache module add feedback into to plan

This commit is contained in:
zzg19950727
2023-04-18 11:41:58 +00:00
committed by ob-robot
parent e392fc2a37
commit 8daff3e658
122 changed files with 45692 additions and 43707 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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