[FEAT MERGE] implement dynamic sampling
This commit is contained in:
@ -3562,21 +3562,21 @@ CREATE TABLE `pujydypf` (
|
||||
|
||||
EXPLAIN select /*+use_merge(t1 t2), leading(t1 t2 t3)*/ t1.hldgddm, t2.pzjzqzh, t2.pzjzdjydy, t3.pjyjydy, t3.pjyscdm from cghldinf t1 left join puzdjypf t2 on t2.pzjzqzh = t1.hldgddm left join pujydypf t3 on t2.pzjzdjydy = t3.pjyjydy and t3.pjyscdm = '01' where hldgddm = 'A100013208';
|
||||
Query Plan
|
||||
===============================================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
-------------------------------------------------------------------------------
|
||||
|0 |PX COORDINATOR | |1 |13 |
|
||||
|1 |└─EXCHANGE OUT DISTR |:EX10001|1 |12 |
|
||||
|2 | └─HASH OUTER JOIN | |1 |11 |
|
||||
|3 | ├─EXCHANGE IN DISTR | |1 |6 |
|
||||
|4 | │ └─EXCHANGE OUT DISTR (PKEY) |:EX10000|1 |6 |
|
||||
|5 | │ └─NESTED-LOOP OUTER JOIN CARTESIAN | |1 |5 |
|
||||
|6 | │ ├─TABLE FULL SCAN |t1 |1 |2 |
|
||||
|7 | │ └─MATERIAL | |1 |3 |
|
||||
|8 | │ └─TABLE GET |t2 |1 |3 |
|
||||
|9 | └─PX PARTITION ITERATOR | |1 |4 |
|
||||
|10| └─TABLE FULL SCAN |t3 |1 |4 |
|
||||
===============================================================================
|
||||
===================================================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
-----------------------------------------------------------------------------------
|
||||
|0 |PX COORDINATOR | |2 |18 |
|
||||
|1 |└─EXCHANGE OUT DISTR |:EX10001 |2 |16 |
|
||||
|2 | └─HASH OUTER JOIN | |2 |13 |
|
||||
|3 | ├─EXCHANGE IN DISTR | |2 |8 |
|
||||
|4 | │ └─EXCHANGE OUT DISTR (PKEY) |:EX10000 |2 |7 |
|
||||
|5 | │ └─NESTED-LOOP OUTER JOIN CARTESIAN | |2 |5 |
|
||||
|6 | │ ├─TABLE FULL SCAN |t1(HLDINDEX)|2 |2 |
|
||||
|7 | │ └─MATERIAL | |1 |3 |
|
||||
|8 | │ └─TABLE GET |t2 |1 |3 |
|
||||
|9 | └─PX PARTITION ITERATOR | |1 |4 |
|
||||
|10| └─TABLE FULL SCAN |t3 |1 |4 |
|
||||
===================================================================================
|
||||
Outputs & filters:
|
||||
-------------------------------------
|
||||
0 - output([INTERNAL_FUNCTION(t1.HLDGDDM, t2.PZJZQZH, t2.PZJZDJYDY, t3.PJYJYDY, t3.PJYSCDM)]), filter(nil), rowset=256
|
||||
@ -3592,7 +3592,7 @@ Outputs & filters:
|
||||
6 - output([t1.HLDGDDM]), filter([t1.HLDGDDM = 'A100013208']), rowset=256
|
||||
access([t1.HLDGDDM]), partitions(p5)
|
||||
is_index_back=false, is_global_index=false, filter_before_indexback[false],
|
||||
range_key([t1.HLDTGDM], [t1.HLDGDDM]), range(MIN,MIN ; MAX,MAX)always true
|
||||
range_key([t1.HLDKMLB], [t1.HLDTGDM], [t1.HLDGDDM]), range(MIN,MIN,MIN ; MAX,MAX,MAX)always true
|
||||
7 - output([t2.PZJZDJYDY], [t2.PZJZQZH]), filter(nil), rowset=256
|
||||
8 - output([t2.PZJZQZH], [t2.PZJZDJYDY]), filter(nil), rowset=256
|
||||
access([t2.PZJZQZH], [t2.PZJZDJYDY]), partitions(p5)
|
||||
@ -3614,24 +3614,24 @@ select /*+use_merge(t1 t2), leading(t1 t2 t3)*/ t1.hldgddm, t2.pzjzqzh, t2.pzjzd
|
||||
+------------+------------+-----------+---------+---------+
|
||||
EXPLAIN select /*+no_rewrite, use_merge(t1 t2), leading(t1 t2 t3)*/ t1.hldgddm, t2.pzjzqzh, t2.pzjzdjydy, t3.pjyjydy, t3.pjyscdm from cghldinf t1 left join puzdjypf t2 on t2.pzjzqzh = t1.hldgddm left join pujydypf t3 on t2.pzjzdjydy = t3.pjyjydy and t3.pjyscdm = '01' where hldgddm = 'A100013208';
|
||||
Query Plan
|
||||
===========================================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
---------------------------------------------------------------------------
|
||||
|0 |PX COORDINATOR | |1 |33 |
|
||||
|1 |└─EXCHANGE OUT DISTR |:EX10002|1 |32 |
|
||||
|2 | └─HASH OUTER JOIN | |1 |31 |
|
||||
|3 | ├─EXCHANGE IN DISTR | |1 |27 |
|
||||
|4 | │ └─EXCHANGE OUT DISTR (PKEY) |:EX10001|1 |26 |
|
||||
|5 | │ └─MERGE OUTER JOIN | |1 |25 |
|
||||
|6 | │ ├─EXCHANGE IN DISTR | |1 |3 |
|
||||
|7 | │ │ └─EXCHANGE OUT DISTR (PKEY)|:EX10000|1 |3 |
|
||||
|8 | │ │ └─TABLE FULL SCAN |t1 |1 |2 |
|
||||
|9 | │ └─SORT | |1 |23 |
|
||||
|10| │ └─PX PARTITION ITERATOR | |1 |22 |
|
||||
|11| │ └─TABLE FULL SCAN |t2 |1 |22 |
|
||||
|12| └─PX PARTITION ITERATOR | |1 |4 |
|
||||
|13| └─TABLE FULL SCAN |t3 |1 |4 |
|
||||
===========================================================================
|
||||
===============================================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
-------------------------------------------------------------------------------
|
||||
|0 |PX COORDINATOR | |2 |38 |
|
||||
|1 |└─EXCHANGE OUT DISTR |:EX10002 |2 |37 |
|
||||
|2 | └─HASH OUTER JOIN | |2 |33 |
|
||||
|3 | ├─EXCHANGE IN DISTR | |2 |29 |
|
||||
|4 | │ └─EXCHANGE OUT DISTR (PKEY) |:EX10001 |2 |28 |
|
||||
|5 | │ └─MERGE OUTER JOIN | |2 |26 |
|
||||
|6 | │ ├─EXCHANGE IN DISTR | |2 |3 |
|
||||
|7 | │ │ └─EXCHANGE OUT DISTR (PKEY)|:EX10000 |2 |3 |
|
||||
|8 | │ │ └─TABLE FULL SCAN |t1(HLDINDEX)|2 |2 |
|
||||
|9 | │ └─SORT | |1 |23 |
|
||||
|10| │ └─PX PARTITION ITERATOR | |1 |22 |
|
||||
|11| │ └─TABLE FULL SCAN |t2 |1 |22 |
|
||||
|12| └─PX PARTITION ITERATOR | |1 |4 |
|
||||
|13| └─TABLE FULL SCAN |t3 |1 |4 |
|
||||
===============================================================================
|
||||
Outputs & filters:
|
||||
-------------------------------------
|
||||
0 - output([INTERNAL_FUNCTION(t1.HLDGDDM, t2.PZJZQZH, t2.PZJZDJYDY, t3.PJYJYDY, t3.PJYSCDM)]), filter(nil), rowset=256
|
||||
@ -3651,7 +3651,7 @@ Outputs & filters:
|
||||
8 - output([t1.HLDGDDM]), filter([t1.HLDGDDM = 'A100013208']), rowset=256
|
||||
access([t1.HLDGDDM]), partitions(p5)
|
||||
is_index_back=false, is_global_index=false, filter_before_indexback[false],
|
||||
range_key([t1.HLDTGDM], [t1.HLDGDDM]), range(MIN,MIN ; MAX,MAX)always true
|
||||
range_key([t1.HLDKMLB], [t1.HLDTGDM], [t1.HLDGDDM]), range(MIN,MIN,MIN ; MAX,MAX,MAX)always true
|
||||
9 - output([t2.PZJZDJYDY], [t2.PZJZQZH]), filter(nil), rowset=256
|
||||
sort_keys([t2.PZJZQZH, ASC]), local merge sort
|
||||
10 - output([t2.PZJZQZH], [t2.PZJZDJYDY]), filter(nil), rowset=256
|
||||
@ -3737,6 +3737,7 @@ Optimization Info:
|
||||
output_rows:0
|
||||
avaiable_index_name:[t1]
|
||||
stats version:0
|
||||
dynamic sampling level:1
|
||||
B:
|
||||
table_rows:1
|
||||
physical_range_rows:1
|
||||
@ -3745,6 +3746,7 @@ Optimization Info:
|
||||
output_rows:1
|
||||
avaiable_index_name:[t2]
|
||||
stats version:0
|
||||
dynamic sampling level:1
|
||||
Plan Type:
|
||||
LOCAL
|
||||
|
||||
@ -3811,6 +3813,7 @@ Optimization Info:
|
||||
avaiable_index_name:[c1, t1]
|
||||
unstable_index_name:[t1]
|
||||
stats version:0
|
||||
dynamic sampling level:1
|
||||
B:
|
||||
table_rows:1
|
||||
physical_range_rows:1
|
||||
@ -3820,6 +3823,7 @@ Optimization Info:
|
||||
avaiable_index_name:[c2, t2]
|
||||
pruned_index_name:[t2]
|
||||
stats version:0
|
||||
dynamic sampling level:1
|
||||
Plan Type:
|
||||
LOCAL
|
||||
|
||||
@ -3834,12 +3838,12 @@ Query Plan
|
||||
-----------------------------------------------------------------
|
||||
|0 |SCALAR GROUP BY | |1 |15 |
|
||||
|1 |└─PX COORDINATOR | |1 |15 |
|
||||
|2 | └─EXCHANGE OUT DISTR |:EX10000|1 |14 |
|
||||
|2 | └─EXCHANGE OUT DISTR |:EX10000|1 |15 |
|
||||
|3 | └─MERGE GROUP BY | |1 |14 |
|
||||
|4 | └─PX PARTITION ITERATOR| |1 |14 |
|
||||
|5 | └─HASH JOIN | |1 |14 |
|
||||
|6 | ├─TABLE FULL SCAN |A |1 |7 |
|
||||
|7 | └─TABLE FULL SCAN |B |1 |7 |
|
||||
|6 | ├─TABLE FULL SCAN |B |1 |7 |
|
||||
|7 | └─TABLE FULL SCAN |A |1 |7 |
|
||||
=================================================================
|
||||
Outputs & filters:
|
||||
-------------------------------------
|
||||
@ -3854,14 +3858,14 @@ Outputs & filters:
|
||||
partition wise, force partition granule
|
||||
5 - output(nil), filter(nil), rowset=256
|
||||
equal_conds([A.c1 = B.c2]), other_conds(nil)
|
||||
6 - output([A.c1]), filter([A.c1 >= 5630905], [A.c1 < 5631105], [A.c2 < 5631105], [A.c1 = A.c2]), rowset=256
|
||||
access([A.c1], [A.c2]), partitions(p[0-3])
|
||||
is_index_back=false, is_global_index=false, filter_before_indexback[false,false,false,false],
|
||||
range_key([A.__pk_increment]), range(MIN ; MAX)always true
|
||||
7 - output([B.c2]), filter([B.c2 < 5631105], [B.c2 >= 5630905]), rowset=256
|
||||
6 - output([B.c2]), filter([B.c2 < 5631105], [B.c2 >= 5630905]), rowset=256
|
||||
access([B.c2]), partitions(p[0-3])
|
||||
is_index_back=false, is_global_index=false, filter_before_indexback[false,false],
|
||||
range_key([B.__pk_increment]), range(MIN ; MAX)always true
|
||||
7 - output([A.c1]), filter([A.c1 >= 5630905], [A.c1 < 5631105], [A.c2 < 5631105], [A.c1 = A.c2]), rowset=256
|
||||
access([A.c1], [A.c2]), partitions(p[0-3])
|
||||
is_index_back=false, is_global_index=false, filter_before_indexback[false,false,false,false],
|
||||
range_key([A.__pk_increment]), range(MIN ; MAX)always true
|
||||
Used Hint:
|
||||
-------------------------------------
|
||||
/*+
|
||||
@ -3876,33 +3880,35 @@ Outline Data:
|
||||
/*+
|
||||
BEGIN_OUTLINE_DATA
|
||||
GBY_PUSHDOWN(@"SEL$0208448F")
|
||||
LEADING(@"SEL$0208448F" ("db_predicate_deduce"."A"@"SEL$1" "db_predicate_deduce"."B"@"SEL$1"))
|
||||
USE_HASH(@"SEL$0208448F" "db_predicate_deduce"."B"@"SEL$1")
|
||||
PQ_DISTRIBUTE(@"SEL$0208448F" "db_predicate_deduce"."B"@"SEL$1" NONE NONE)
|
||||
FULL(@"SEL$0208448F" "db_predicate_deduce"."A"@"SEL$1")
|
||||
LEADING(@"SEL$0208448F" ("db_predicate_deduce"."B"@"SEL$1" "db_predicate_deduce"."A"@"SEL$1"))
|
||||
USE_HASH(@"SEL$0208448F" "db_predicate_deduce"."A"@"SEL$1")
|
||||
PQ_DISTRIBUTE(@"SEL$0208448F" "db_predicate_deduce"."A"@"SEL$1" NONE NONE)
|
||||
FULL(@"SEL$0208448F" "db_predicate_deduce"."B"@"SEL$1")
|
||||
FULL(@"SEL$0208448F" "db_predicate_deduce"."A"@"SEL$1")
|
||||
PRED_DEDUCE(@"SEL$1")
|
||||
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
||||
END_OUTLINE_DATA
|
||||
*/
|
||||
Optimization Info:
|
||||
-------------------------------------
|
||||
A:
|
||||
table_rows:1
|
||||
physical_range_rows:1
|
||||
logical_range_rows:1
|
||||
index_back_rows:0
|
||||
output_rows:0
|
||||
avaiable_index_name:[t1]
|
||||
stats version:0
|
||||
B:
|
||||
table_rows:1
|
||||
physical_range_rows:1
|
||||
logical_range_rows:1
|
||||
index_back_rows:0
|
||||
output_rows:0
|
||||
output_rows:1
|
||||
avaiable_index_name:[t2]
|
||||
stats version:0
|
||||
dynamic sampling level:1
|
||||
A:
|
||||
table_rows:1
|
||||
physical_range_rows:1
|
||||
logical_range_rows:1
|
||||
index_back_rows:0
|
||||
output_rows:1
|
||||
avaiable_index_name:[t1]
|
||||
stats version:0
|
||||
dynamic sampling level:1
|
||||
Plan Type:
|
||||
DISTRIBUTED
|
||||
|
||||
@ -4109,7 +4115,7 @@ Query Plan
|
||||
=================================================
|
||||
|ID|OPERATOR |NAME|EST.ROWS|EST.TIME(us)|
|
||||
-------------------------------------------------
|
||||
|0 |HASH JOIN | |4 |7 |
|
||||
|0 |HASH JOIN | |3 |7 |
|
||||
|1 |├─TABLE FULL SCAN|t2 |4 |2 |
|
||||
|2 |└─TABLE FULL SCAN|t1 |5 |2 |
|
||||
=================================================
|
||||
@ -4137,7 +4143,7 @@ Query Plan
|
||||
-------------------------------------------------
|
||||
|0 |HASH JOIN | |1 |5 |
|
||||
|1 |├─TABLE FULL SCAN|t2 |1 |2 |
|
||||
|2 |└─TABLE FULL SCAN|t1 |4 |2 |
|
||||
|2 |└─TABLE FULL SCAN|t1 |3 |2 |
|
||||
=================================================
|
||||
Outputs & filters:
|
||||
-------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user