2920 lines
136 KiB
Plaintext
2920 lines
136 KiB
Plaintext
*************** Case 1 ***************
|
|
|
|
SQL: select t1.c1 from t1, t2 limit 100;
|
|
|
|
==========================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
----------------------------------------------------------
|
|
|0 |LIMIT | |100 |414 |
|
|
|1 | NESTED-LOOP JOIN CARTESIAN | |100 |413 |
|
|
|2 | SUBPLAN SCAN |VIEW1 |1 |228 |
|
|
|3 | LIMIT | |1 |227 |
|
|
|4 | PX COORDINATOR | |1 |227 |
|
|
|5 | EXCHANGE OUT DISTR |:EX10000|1 |227 |
|
|
|6 | LIMIT | |1 |227 |
|
|
|7 | PX PARTITION ITERATOR | |1 |227 |
|
|
|8 | TABLE SCAN |t1 |1 |227 |
|
|
|9 | MATERIAL | |100 |160 |
|
|
|10| SUBPLAN SCAN |VIEW2 |100 |159 |
|
|
|11| LIMIT | |100 |158 |
|
|
|12| PX COORDINATOR | |100 |156 |
|
|
|13| EXCHANGE OUT DISTR |:EX20000|100 |150 |
|
|
|14| LIMIT | |100 |140 |
|
|
|15| PX PARTITION ITERATOR| |100 |138 |
|
|
|16| TABLE SCAN |t2 |100 |138 |
|
|
==========================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([VIEW1.t1.c1]), filter(nil), limit(100), offset(nil)
|
|
1 - output([VIEW1.t1.c1]), filter(nil),
|
|
conds(nil), nl_params_(nil), batch_join=false
|
|
2 - output([VIEW1.t1.c1]), filter(nil),
|
|
access([VIEW1.t1.c1])
|
|
3 - output([t1.c1]), filter(nil), limit(100), offset(nil)
|
|
4 - output([t1.c1]), filter(nil)
|
|
5 - output([t1.c1]), filter(nil), dop=1
|
|
6 - output([t1.c1]), filter(nil), limit(100), offset(nil)
|
|
7 - output([t1.c1]), filter(nil),
|
|
force partition granule.
|
|
8 - output([t1.c1]), filter(nil),
|
|
access([t1.c1]), partitions(p[0-4]),
|
|
limit(100), offset(nil),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
9 - output(nil), filter(nil)
|
|
10 - output(nil), filter(nil),
|
|
access(nil)
|
|
11 - output([1]), filter(nil), limit(100), offset(nil)
|
|
12 - output(nil), filter(nil)
|
|
13 - output(nil), filter(nil), dop=1
|
|
14 - output(nil), filter(nil), limit(100), offset(nil)
|
|
15 - output(nil), filter(nil),
|
|
force partition granule.
|
|
16 - output(nil), filter(nil),
|
|
access([t2.c1]), partitions(p[0-2]),
|
|
limit(100), offset(nil),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 1(end) **************
|
|
|
|
*************** Case 2 ***************
|
|
|
|
SQL: select c1 from t1 group by c1;
|
|
|
|
====================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
----------------------------------------------------
|
|
|0 |PX COORDINATOR | |500 |466 |
|
|
|1 | EXCHANGE OUT DISTR |:EX10000|500 |439 |
|
|
|2 | PX PARTITION ITERATOR| |500 |387 |
|
|
|3 | TABLE SCAN |t1 |500 |387 |
|
|
====================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1)]), filter(nil), dop=1
|
|
2 - output([t1.c1]), filter(nil),
|
|
force partition granule.
|
|
3 - output([t1.c1]), filter(nil),
|
|
access([t1.c1]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 2(end) **************
|
|
|
|
*************** Case 3 ***************
|
|
|
|
SQL: select distinct t4.c1, t4.c2, t2.c2 from t4, t2 where t4.c1 = t2.c1;
|
|
|
|
==========================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
----------------------------------------------------------
|
|
|0 |PX COORDINATOR | |90 |482 |
|
|
|1 | EXCHANGE OUT DISTR |:EX10001|90 |466 |
|
|
|2 | HASH JOIN | |90 |434 |
|
|
|3 | EXCHANGE IN DISTR | |100 |106 |
|
|
|4 | EXCHANGE OUT DISTR (PKEY)|:EX10000|100 |97 |
|
|
|5 | TABLE SCAN |t4 |100 |78 |
|
|
|6 | PX PARTITION ITERATOR | |300 |233 |
|
|
|7 | TABLE SCAN |t2 |300 |233 |
|
|
==========================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t4.c1, t4.c2, t2.c2)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t4.c1, t4.c2, t2.c2)]), filter(nil), dop=1
|
|
2 - output([t4.c1], [t4.c2], [t2.c2]), filter(nil),
|
|
equal_conds([t4.c1 = t2.c1]), other_conds(nil)
|
|
3 - output([t4.c1], [t4.c2]), filter(nil)
|
|
4 - (#keys=1, [t4.c1]), output([t4.c1], [t4.c2]), filter(nil), is_single, dop=1
|
|
5 - output([t4.c1], [t4.c2]), filter(nil),
|
|
access([t4.c1], [t4.c2]), partitions(p0),
|
|
is_index_back=false,
|
|
range_key([t4.c1], [t4.c2]), range(MIN,MIN ; MAX,MAX)always true
|
|
6 - output([t2.c1], [t2.c2]), filter(nil),
|
|
affinitize, force partition granule.
|
|
7 - output([t2.c1], [t2.c2]), filter(nil),
|
|
access([t2.c1], [t2.c2]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 3(end) **************
|
|
|
|
*************** Case 4 ***************
|
|
|
|
SQL: select t1.c1 from t1, t2 where t1.c1=t2.c1 limit 100;
|
|
|
|
============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
------------------------------------------------------------
|
|
|0 |LIMIT | |100 |633 |
|
|
|1 | PX COORDINATOR | |100 |631 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10001|100 |621 |
|
|
|3 | LIMIT | |100 |603 |
|
|
|4 | HASH JOIN | |100 |601 |
|
|
|5 | PX PARTITION ITERATOR | |300 |233 |
|
|
|6 | TABLE SCAN |t2 |300 |233 |
|
|
|7 | EXCHANGE IN DISTR | |167 |257 |
|
|
|8 | EXCHANGE OUT DISTR (PKEY)|:EX10000|167 |247 |
|
|
|9 | PX PARTITION ITERATOR | |167 |230 |
|
|
|10| TABLE SCAN |t1 |167 |230 |
|
|
============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t1.c1]), filter(nil), limit(100), offset(nil)
|
|
1 - output([t1.c1]), filter(nil)
|
|
2 - output([t1.c1]), filter(nil), dop=1
|
|
3 - output([t1.c1]), filter(nil), limit(100), offset(nil)
|
|
4 - output([t1.c1]), filter(nil),
|
|
equal_conds([t1.c1 = t2.c1]), other_conds(nil)
|
|
5 - output([t2.c1]), filter(nil),
|
|
affinitize, force partition granule.
|
|
6 - output([t2.c1]), filter(nil),
|
|
access([t2.c1]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
7 - output([t1.c1]), filter(nil)
|
|
8 - (#keys=1, [t1.c1]), output([t1.c1]), filter(nil), dop=1
|
|
9 - output([t1.c1]), filter(nil),
|
|
force partition granule.
|
|
10 - output([t1.c1]), filter(nil),
|
|
access([t1.c1]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 4(end) **************
|
|
|
|
*************** Case 5 ***************
|
|
|
|
SQL: select t1.c2 + t2.c1 from t1, t2 where t1.c1 = t2.c2 and t1.c1 and t1.c1 = 1 and t2.c1 = 2;
|
|
|
|
=======================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-------------------------------------------------------
|
|
|0 |NESTED-LOOP JOIN CARTESIAN| |1 |55 |
|
|
|1 | PX COORDINATOR | |1 |46 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10000|1 |46 |
|
|
|3 | TABLE GET |t2 |1 |46 |
|
|
|4 | PX COORDINATOR | |1 |46 |
|
|
|5 | EXCHANGE OUT DISTR |:EX20000|1 |46 |
|
|
|6 | TABLE GET |t1 |1 |46 |
|
|
=======================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t1.c2 + ?]), filter(nil),
|
|
conds(nil), nl_params_(nil), batch_join=false
|
|
1 - output(nil), filter(nil)
|
|
2 - output(nil), filter(nil), is_single, dop=1
|
|
3 - output(nil), filter([? = t2.c2]),
|
|
access([t2.c2]), partitions(p2),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t2.c1]), range[2 ; 2],
|
|
range_cond([t2.c1 = ?])
|
|
4 - output([t1.c2]), filter(nil)
|
|
5 - output([t1.c2]), filter(nil), is_single, dop=1
|
|
6 - output([t1.c2]), filter(nil),
|
|
access([t1.c2]), partitions(p1),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range[1 ; 1],
|
|
range_cond([t1.c1 = ?])
|
|
|
|
*************** Case 5(end) **************
|
|
|
|
*************** Case 6 ***************
|
|
|
|
SQL: select t1.c1 from t1, t2, t3 where t1.c1=t2.c1 and t1.c2>t2.c2 and t2.c3=t3.c3 and t3.c1>10;
|
|
|
|
===========================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-----------------------------------------------------------
|
|
|0 |HASH JOIN | |82 |1300|
|
|
|1 | PX COORDINATOR | |100 |158 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10000|100 |137 |
|
|
|3 | PX PARTITION ITERATOR | |100 |93 |
|
|
|4 | TABLE SCAN |t3 |100 |93 |
|
|
|5 | PX COORDINATOR | |100 |1056|
|
|
|6 | EXCHANGE OUT DISTR |:EX20001|100 |1024|
|
|
|7 | HASH JOIN | |100 |954 |
|
|
|8 | EXCHANGE IN DISTR | |500 |528 |
|
|
|9 | EXCHANGE OUT DISTR (PKEY)|:EX20000|500 |481 |
|
|
|10| PX PARTITION ITERATOR | |500 |387 |
|
|
|11| TABLE SCAN |t1 |500 |387 |
|
|
|12| PX PARTITION ITERATOR | |300 |233 |
|
|
|13| TABLE SCAN |t2 |300 |233 |
|
|
===========================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t1.c1]), filter(nil),
|
|
equal_conds([t2.c3 = t3.c3]), other_conds(nil)
|
|
1 - output([t3.c3]), filter(nil)
|
|
2 - output([t3.c3]), filter(nil), dop=1
|
|
3 - output([t3.c3]), filter(nil),
|
|
force partition granule.
|
|
4 - output([t3.c3]), filter(nil),
|
|
access([t3.c3]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t3.c1]), range(10 ; MAX),
|
|
range_cond([t3.c1 > ?])
|
|
5 - output([t1.c1], [t2.c3]), filter(nil)
|
|
6 - output([t1.c1], [t2.c3]), filter(nil), dop=1
|
|
7 - output([t1.c1], [t2.c3]), filter(nil),
|
|
equal_conds([t1.c1 = t2.c1]), other_conds([t1.c2 > t2.c2])
|
|
8 - output([t1.c1], [t1.c2]), filter(nil)
|
|
9 - (#keys=1, [t1.c1]), output([t1.c1], [t1.c2]), filter(nil), dop=1
|
|
10 - output([t1.c1], [t1.c2]), filter(nil),
|
|
force partition granule.
|
|
11 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
12 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
13 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 6(end) **************
|
|
|
|
*************** Case 7 ***************
|
|
|
|
SQL: select opt.t3.c2 from opt.t1,t2,t3 where t1.c1+t2.c1=t3.c1;
|
|
|
|
==============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST |
|
|
--------------------------------------------------------------
|
|
|0 |PX COORDINATOR | |150000 |166619|
|
|
|1 | EXCHANGE OUT DISTR |:EX10003|150000 |141301|
|
|
|2 | HASH JOIN | |150000 |87585 |
|
|
|3 | PX PARTITION ITERATOR | |200 |155 |
|
|
|4 | TABLE SCAN |t3 |200 |155 |
|
|
|5 | EXCHANGE IN DISTR | |150000 |50629 |
|
|
|6 | EXCHANGE OUT DISTR (PKEY) |:EX10002|150000 |36655 |
|
|
|7 | NESTED-LOOP JOIN CARTESIAN| |150000 |8483 |
|
|
|8 | EXCHANGE IN DISTR | |300 |280 |
|
|
|9 | EXCHANGE OUT DISTR |:EX10000|300 |263 |
|
|
|10| PX PARTITION ITERATOR | |300 |233 |
|
|
|11| TABLE SCAN |t2 |300 |233 |
|
|
|12| MATERIAL | |500 |468 |
|
|
|13| EXCHANGE IN DISTR | |500 |466 |
|
|
|14| EXCHANGE OUT DISTR |:EX10001|500 |439 |
|
|
|15| PX PARTITION ITERATOR | |500 |387 |
|
|
|16| TABLE SCAN |t1 |500 |387 |
|
|
==============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t3.c2)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t3.c2)]), filter(nil), dop=1
|
|
2 - output([t3.c2]), filter(nil),
|
|
equal_conds([t1.c1 + t2.c1 = t3.c1]), other_conds(nil)
|
|
3 - output([t3.c1], [t3.c2]), filter(nil),
|
|
affinitize, force partition granule.
|
|
4 - output([t3.c1], [t3.c2]), filter(nil),
|
|
access([t3.c1], [t3.c2]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t3.c1]), range(MIN ; MAX)always true
|
|
5 - output([t1.c1 + t2.c1]), filter(nil)
|
|
6 - (#keys=1, [t1.c1 + t2.c1]), output([t1.c1 + t2.c1]), filter(nil), is_single, dop=1
|
|
7 - output([t1.c1], [t2.c1]), filter(nil),
|
|
conds(nil), nl_params_(nil), batch_join=false
|
|
8 - output([t2.c1]), filter(nil)
|
|
9 - output([t2.c1]), filter(nil), dop=1
|
|
10 - output([t2.c1]), filter(nil),
|
|
force partition granule.
|
|
11 - output([t2.c1]), filter(nil),
|
|
access([t2.c1]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
12 - output([t1.c1]), filter(nil)
|
|
13 - output([t1.c1]), filter(nil)
|
|
14 - output([t1.c1]), filter(nil), dop=1
|
|
15 - output([t1.c1]), filter(nil),
|
|
force partition granule.
|
|
16 - output([t1.c1]), filter(nil),
|
|
access([t1.c1]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 7(end) **************
|
|
|
|
*************** Case 8 ***************
|
|
|
|
SQL: select t1.c1 from t1,t2,t3 where t1.c1=t3.c1 and t1.c2=t2.c2 and t2.c3=t3.c3;
|
|
|
|
===========================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-----------------------------------------------------------
|
|
|0 |HASH JOIN | |4 |1673|
|
|
|1 | PX COORDINATOR | |200 |1022|
|
|
|2 | EXCHANGE OUT DISTR |:EX10001|200 |965 |
|
|
|3 | HASH JOIN | |200 |842 |
|
|
|4 | PX PARTITION ITERATOR | |500 |387 |
|
|
|5 | TABLE SCAN |t1 |500 |387 |
|
|
|6 | EXCHANGE IN DISTR | |200 |285 |
|
|
|7 | EXCHANGE OUT DISTR (PKEY)|:EX10000|200 |244 |
|
|
|8 | PX PARTITION ITERATOR | |200 |155 |
|
|
|9 | TABLE SCAN |t3 |200 |155 |
|
|
|10| PX COORDINATOR | |300 |428 |
|
|
|11| EXCHANGE OUT DISTR |:EX20000|300 |366 |
|
|
|12| PX PARTITION ITERATOR | |300 |233 |
|
|
|13| TABLE SCAN |t2 |300 |233 |
|
|
===========================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t1.c1]), filter(nil),
|
|
equal_conds([t1.c2 = t2.c2], [t2.c3 = t3.c3]), other_conds(nil)
|
|
1 - output([t1.c1], [t1.c2], [t3.c3]), filter(nil)
|
|
2 - output([t1.c1], [t1.c2], [t3.c3]), filter(nil), dop=1
|
|
3 - output([t1.c1], [t1.c2], [t3.c3]), filter(nil),
|
|
equal_conds([t1.c1 = t3.c1]), other_conds(nil)
|
|
4 - output([t1.c1], [t1.c2]), filter(nil),
|
|
affinitize, force partition granule.
|
|
5 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
6 - output([t3.c1], [t3.c3]), filter(nil)
|
|
7 - (#keys=1, [t3.c1]), output([t3.c1], [t3.c3]), filter(nil), dop=1
|
|
8 - output([t3.c1], [t3.c3]), filter(nil),
|
|
force partition granule.
|
|
9 - output([t3.c1], [t3.c3]), filter(nil),
|
|
access([t3.c1], [t3.c3]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t3.c1]), range(MIN ; MAX)always true
|
|
10 - output([t2.c2], [t2.c3]), filter(nil)
|
|
11 - output([t2.c2], [t2.c3]), filter(nil), dop=1
|
|
12 - output([t2.c2], [t2.c3]), filter(nil),
|
|
force partition granule.
|
|
13 - output([t2.c2], [t2.c3]), filter(nil),
|
|
access([t2.c2], [t2.c3]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 8(end) **************
|
|
|
|
*************** Case 9 ***************
|
|
|
|
SQL: select t1.c1 from t1,t2,t3 where t1.c1=t2.c1 and t1.c1+t2.c1=t3.c1;
|
|
|
|
=============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-------------------------------------------------------------
|
|
|0 |PX COORDINATOR | |300 |1342|
|
|
|1 | EXCHANGE OUT DISTR |:EX10002|300 |1303|
|
|
|2 | HASH JOIN | |300 |1221|
|
|
|3 | PX PARTITION ITERATOR | |200 |155 |
|
|
|4 | TABLE SCAN |t3 |200 |155 |
|
|
|5 | EXCHANGE IN DISTR | |300 |943 |
|
|
|6 | EXCHANGE OUT DISTR (PKEY) |:EX10001|300 |915 |
|
|
|7 | HASH JOIN | |300 |859 |
|
|
|8 | EXCHANGE IN DISTR | |300 |280 |
|
|
|9 | EXCHANGE OUT DISTR (PKEY)|:EX10000|300 |263 |
|
|
|10| PX PARTITION ITERATOR | |300 |233 |
|
|
|11| TABLE SCAN |t2 |300 |233 |
|
|
|12| PX PARTITION ITERATOR | |500 |387 |
|
|
|13| TABLE SCAN |t1 |500 |387 |
|
|
=============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1)]), filter(nil), dop=1
|
|
2 - output([t1.c1]), filter(nil),
|
|
equal_conds([t1.c1 + t2.c1 = t3.c1]), other_conds(nil)
|
|
3 - output([t3.c1]), filter(nil),
|
|
affinitize, force partition granule.
|
|
4 - output([t3.c1]), filter(nil),
|
|
access([t3.c1]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t3.c1]), range(MIN ; MAX)always true
|
|
5 - output([t1.c1], [t1.c1 + t2.c1]), filter(nil)
|
|
6 - (#keys=1, [t1.c1 + t2.c1]), output([t1.c1], [t1.c1 + t2.c1]), filter(nil), dop=1
|
|
7 - output([t1.c1], [t2.c1]), filter(nil),
|
|
equal_conds([t1.c1 = t2.c1]), other_conds(nil)
|
|
8 - output([t2.c1]), filter(nil)
|
|
9 - (#keys=1, [t2.c1]), output([t2.c1]), filter(nil), dop=1
|
|
10 - output([t2.c1]), filter(nil),
|
|
force partition granule.
|
|
11 - output([t2.c1]), filter(nil),
|
|
access([t2.c1]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
12 - output([t1.c1]), filter(nil),
|
|
affinitize, force partition granule.
|
|
13 - output([t1.c1]), filter(nil),
|
|
access([t1.c1]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 9(end) **************
|
|
|
|
*************** Case 10 ***************
|
|
|
|
SQL: select t1.c1 from t1,t2,t3, t1 tt where t1.c1=t3.c1 and t1.c2=tt.c2 and t1.c1+t2.c1=tt.c1;
|
|
|
|
============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
------------------------------------------------------------
|
|
|0 |NESTED-LOOP JOIN | |487 |7244|
|
|
|1 | HASH JOIN | |811 |1519|
|
|
|2 | PX COORDINATOR | |200 |822 |
|
|
|3 | EXCHANGE OUT DISTR |:EX10001|200 |796 |
|
|
|4 | HASH JOIN | |200 |741 |
|
|
|5 | EXCHANGE IN DISTR | |200 |187 |
|
|
|6 | EXCHANGE OUT DISTR (PKEY)|:EX10000|200 |176 |
|
|
|7 | PX PARTITION ITERATOR | |200 |155 |
|
|
|8 | TABLE SCAN |t3 |200 |155 |
|
|
|9 | PX PARTITION ITERATOR | |500 |387 |
|
|
|10| TABLE SCAN |t1 |500 |387 |
|
|
|11| PX COORDINATOR | |500 |528 |
|
|
|12| EXCHANGE OUT DISTR |:EX20000|500 |481 |
|
|
|13| PX PARTITION ITERATOR | |500 |387 |
|
|
|14| TABLE SCAN |tt |500 |387 |
|
|
|15| MATERIAL | |300 |281 |
|
|
|16| PX COORDINATOR | |300 |280 |
|
|
|17| EXCHANGE OUT DISTR |:EX30000|300 |263 |
|
|
|18| PX PARTITION ITERATOR | |300 |233 |
|
|
|19| TABLE SCAN |t2 |300 |233 |
|
|
============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t1.c1]), filter(nil),
|
|
conds([t1.c1 + t2.c1 = tt.c1]), nl_params_(nil), batch_join=false
|
|
1 - output([t1.c1], [tt.c1]), filter(nil),
|
|
equal_conds([t1.c2 = tt.c2]), other_conds(nil)
|
|
2 - output([t1.c1], [t1.c2]), filter(nil)
|
|
3 - output([t1.c1], [t1.c2]), filter(nil), dop=1
|
|
4 - output([t1.c1], [t1.c2]), filter(nil),
|
|
equal_conds([t1.c1 = t3.c1]), other_conds(nil)
|
|
5 - output([t3.c1]), filter(nil)
|
|
6 - (#keys=1, [t3.c1]), output([t3.c1]), filter(nil), dop=1
|
|
7 - output([t3.c1]), filter(nil),
|
|
force partition granule.
|
|
8 - output([t3.c1]), filter(nil),
|
|
access([t3.c1]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t3.c1]), range(MIN ; MAX)always true
|
|
9 - output([t1.c1], [t1.c2]), filter(nil),
|
|
affinitize, force partition granule.
|
|
10 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
11 - output([tt.c1], [tt.c2]), filter(nil)
|
|
12 - output([tt.c1], [tt.c2]), filter(nil), dop=1
|
|
13 - output([tt.c1], [tt.c2]), filter(nil),
|
|
force partition granule.
|
|
14 - output([tt.c1], [tt.c2]), filter(nil),
|
|
access([tt.c1], [tt.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([tt.c1]), range(MIN ; MAX)always true
|
|
15 - output([t2.c1]), filter(nil)
|
|
16 - output([t2.c1]), filter(nil)
|
|
17 - output([t2.c1]), filter(nil), dop=1
|
|
18 - output([t2.c1]), filter(nil),
|
|
force partition granule.
|
|
19 - output([t2.c1]), filter(nil),
|
|
access([t2.c1]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 10(end) **************
|
|
|
|
*************** Case 11 ***************
|
|
|
|
SQL: select t1.c1 from t1, (select * from t2) as t where t1.c1=t.c1;
|
|
|
|
==========================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
----------------------------------------------------------
|
|
|0 |PX COORDINATOR | |300 |943 |
|
|
|1 | EXCHANGE OUT DISTR |:EX10001|300 |915 |
|
|
|2 | HASH JOIN | |300 |859 |
|
|
|3 | EXCHANGE IN DISTR | |300 |280 |
|
|
|4 | EXCHANGE OUT DISTR (PKEY)|:EX10000|300 |263 |
|
|
|5 | PX PARTITION ITERATOR | |300 |233 |
|
|
|6 | TABLE SCAN |t2 |300 |233 |
|
|
|7 | PX PARTITION ITERATOR | |500 |387 |
|
|
|8 | TABLE SCAN |t1 |500 |387 |
|
|
==========================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1)]), filter(nil), dop=1
|
|
2 - output([t1.c1]), filter(nil),
|
|
equal_conds([t1.c1 = t2.c1]), other_conds(nil)
|
|
3 - output([t2.c1]), filter(nil)
|
|
4 - (#keys=1, [t2.c1]), output([t2.c1]), filter(nil), dop=1
|
|
5 - output([t2.c1]), filter(nil),
|
|
force partition granule.
|
|
6 - output([t2.c1]), filter(nil),
|
|
access([t2.c1]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
7 - output([t1.c1]), filter(nil),
|
|
affinitize, force partition granule.
|
|
8 - output([t1.c1]), filter(nil),
|
|
access([t1.c1]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 11(end) **************
|
|
|
|
*************** Case 12 ***************
|
|
|
|
SQL: select t1.c1 from t1, (select * from t2 where c2>1 order by c1 limit 10) as t where t1.c1=t.c1;
|
|
|
|
================================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
----------------------------------------------------------------
|
|
|0 |PX COORDINATOR | |10 |213 |
|
|
|1 | EXCHANGE OUT DISTR |:EX10002|10 |212 |
|
|
|2 | NESTED-LOOP JOIN | |10 |210 |
|
|
|3 | EXCHANGE IN DISTR | |10 |144 |
|
|
|4 | EXCHANGE OUT DISTR (PKEY) |:EX10001|10 |143 |
|
|
|5 | SUBPLAN SCAN |t |10 |142 |
|
|
|6 | LIMIT | |10 |142 |
|
|
|7 | EXCHANGE IN MERGE SORT DISTR| |10 |142 |
|
|
|8 | EXCHANGE OUT DISTR |:EX10000|10 |141 |
|
|
|9 | TOP-N SORT | |10 |139 |
|
|
|10| PX PARTITION ITERATOR | |10 |137 |
|
|
|11| TABLE SCAN |t2 |10 |137 |
|
|
|12| PX PARTITION ITERATOR | |1 |29 |
|
|
|13| TABLE GET |t1 |1 |29 |
|
|
================================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1)]), filter(nil), dop=1
|
|
2 - output([t1.c1]), filter(nil),
|
|
conds(nil), nl_params_([t.c1]), batch_join=false
|
|
3 - output([PARTITION_ID], [t.c1]), filter(nil)
|
|
4 - (#keys=1, [t.c1]), output([PARTITION_ID], [t.c1]), filter(nil), is_single, dop=1
|
|
5 - output([t.c1]), filter(nil),
|
|
access([t.c1])
|
|
6 - output([t2.c1]), filter(nil), limit(10), offset(nil)
|
|
7 - output([t2.c1]), filter(nil), sort_keys([t2.c1, ASC])
|
|
8 - output([t2.c1]), filter(nil), dop=1
|
|
9 - output([t2.c1]), filter(nil), sort_keys([t2.c1, ASC]), topn(10), local merge sort
|
|
10 - output([t2.c1]), filter(nil),
|
|
force partition granule.
|
|
11 - output([t2.c1]), filter([t2.c2 > ?]),
|
|
access([t2.c1], [t2.c2]), partitions(p[0-2]),
|
|
limit(10), offset(nil),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
12 - output([t1.c1]), filter(nil),
|
|
affinitize, force partition granule.
|
|
13 - output([t1.c1]), filter(nil),
|
|
access([t1.c1]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX),
|
|
range_cond([t1.c1 = ?])
|
|
|
|
*************** Case 12(end) **************
|
|
|
|
*************** Case 13 ***************
|
|
|
|
SQL: select c1, c1+c2 from t1 where c1 > 100 order by c2 + c1;
|
|
|
|
=======================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-------------------------------------------------------
|
|
|0 |PX COORDINATOR MERGE SORT | |1 |228 |
|
|
|1 | EXCHANGE OUT DISTR |:EX10000|1 |228 |
|
|
|2 | SORT | |1 |227 |
|
|
|3 | PX PARTITION ITERATOR | |1 |227 |
|
|
|4 | TABLE SCAN |t1 |1 |227 |
|
|
=======================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c1 + t1.c2)]), filter(nil), sort_keys([t1.c2 + t1.c1, ASC])
|
|
1 - output([t1.c2 + t1.c1], [INTERNAL_FUNCTION(t1.c1, t1.c1 + t1.c2)]), filter(nil), dop=1
|
|
2 - output([t1.c2 + t1.c1], [t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c2 + t1.c1, ASC])
|
|
3 - output([t1.c1], [t1.c2]), filter(nil),
|
|
force partition granule.
|
|
4 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(100 ; MAX),
|
|
range_cond([t1.c1 > ?])
|
|
|
|
*************** Case 13(end) **************
|
|
|
|
*************** Case 14 ***************
|
|
|
|
SQL: select * from t1,t2 where t1.c1 = t2.c1;
|
|
|
|
==========================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
----------------------------------------------------------
|
|
|0 |PX COORDINATOR | |300 |1260|
|
|
|1 | EXCHANGE OUT DISTR |:EX10001|300 |1164|
|
|
|2 | HASH JOIN | |300 |954 |
|
|
|3 | EXCHANGE IN DISTR | |500 |528 |
|
|
|4 | EXCHANGE OUT DISTR (PKEY)|:EX10000|500 |481 |
|
|
|5 | PX PARTITION ITERATOR | |500 |387 |
|
|
|6 | TABLE SCAN |t1 |500 |387 |
|
|
|7 | PX PARTITION ITERATOR | |300 |233 |
|
|
|8 | TABLE SCAN |t2 |300 |233 |
|
|
==========================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3)]), filter(nil), dop=1
|
|
2 - output([t1.c1], [t2.c1], [t1.c2], [t2.c2], [t2.c3]), filter(nil),
|
|
equal_conds([t1.c1 = t2.c1]), other_conds(nil)
|
|
3 - output([t1.c1], [t1.c2]), filter(nil)
|
|
4 - (#keys=1, [t1.c1]), output([t1.c1], [t1.c2]), filter(nil), dop=1
|
|
5 - output([t1.c1], [t1.c2]), filter(nil),
|
|
force partition granule.
|
|
6 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
7 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
8 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 14(end) **************
|
|
|
|
*************** Case 15 ***************
|
|
|
|
SQL: select t1.c1, t2.c2, t2.c3 from t1,t2 where t1.c1 = t2.c1;
|
|
|
|
==========================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
----------------------------------------------------------
|
|
|0 |PX COORDINATOR | |300 |1160|
|
|
|1 | EXCHANGE OUT DISTR |:EX10001|300 |1075|
|
|
|2 | HASH JOIN | |300 |891 |
|
|
|3 | EXCHANGE IN DISTR | |500 |466 |
|
|
|4 | EXCHANGE OUT DISTR (PKEY)|:EX10000|500 |439 |
|
|
|5 | PX PARTITION ITERATOR | |500 |387 |
|
|
|6 | TABLE SCAN |t1 |500 |387 |
|
|
|7 | PX PARTITION ITERATOR | |300 |233 |
|
|
|8 | TABLE SCAN |t2 |300 |233 |
|
|
==========================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1, t2.c2, t2.c3)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1, t2.c2, t2.c3)]), filter(nil), dop=1
|
|
2 - output([t1.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
equal_conds([t1.c1 = t2.c1]), other_conds(nil)
|
|
3 - output([t1.c1]), filter(nil)
|
|
4 - (#keys=1, [t1.c1]), output([t1.c1]), filter(nil), dop=1
|
|
5 - output([t1.c1]), filter(nil),
|
|
force partition granule.
|
|
6 - output([t1.c1]), filter(nil),
|
|
access([t1.c1]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
7 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
8 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 15(end) **************
|
|
|
|
*************** Case 16 ***************
|
|
|
|
SQL: select c2 from t1 order by c1;
|
|
|
|
=======================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-------------------------------------------------------
|
|
|0 |PX COORDINATOR MERGE SORT | |500 |631 |
|
|
|1 | EXCHANGE OUT DISTR |:EX10000|500 |584 |
|
|
|2 | SORT | |500 |490 |
|
|
|3 | PX PARTITION ITERATOR | |500 |387 |
|
|
|4 | TABLE SCAN |t1 |500 |387 |
|
|
=======================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c2)]), filter(nil), sort_keys([t1.c1, ASC])
|
|
1 - output([t1.c1], [INTERNAL_FUNCTION(t1.c2)]), filter(nil), dop=1
|
|
2 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
|
|
3 - output([t1.c1], [t1.c2]), filter(nil),
|
|
force partition granule.
|
|
4 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 16(end) **************
|
|
|
|
*************** Case 17 ***************
|
|
|
|
SQL: select t1.c1, t2.c2, t2.c3 from t1,t2 where t1.c1 = t2.c1 order by t1.c2;
|
|
|
|
===========================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-----------------------------------------------------------
|
|
|0 |PX COORDINATOR MERGE SORT | |300 |1471|
|
|
|1 | EXCHANGE OUT DISTR |:EX10001|300 |1375|
|
|
|2 | SORT | |300 |1165|
|
|
|3 | HASH JOIN | |300 |954 |
|
|
|4 | EXCHANGE IN DISTR | |500 |528 |
|
|
|5 | EXCHANGE OUT DISTR (PKEY)|:EX10000|500 |481 |
|
|
|6 | PX PARTITION ITERATOR | |500 |387 |
|
|
|7 | TABLE SCAN |t1 |500 |387 |
|
|
|8 | PX PARTITION ITERATOR | |300 |233 |
|
|
|9 | TABLE SCAN |t2 |300 |233 |
|
|
===========================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1, t2.c2, t2.c3)]), filter(nil), sort_keys([t1.c2, ASC])
|
|
1 - output([t1.c2], [INTERNAL_FUNCTION(t1.c1, t2.c2, t2.c3)]), filter(nil), dop=1
|
|
2 - output([t1.c2], [t1.c1], [t2.c2], [t2.c3]), filter(nil), sort_keys([t1.c2, ASC])
|
|
3 - output([t1.c2], [t1.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
equal_conds([t1.c1 = t2.c1]), other_conds(nil)
|
|
4 - output([t1.c2], [t1.c1]), filter(nil)
|
|
5 - (#keys=1, [t1.c1]), output([t1.c2], [t1.c1]), filter(nil), dop=1
|
|
6 - output([t1.c1], [t1.c2]), filter(nil),
|
|
force partition granule.
|
|
7 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
8 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
9 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 17(end) **************
|
|
|
|
*************** Case 18 ***************
|
|
|
|
SQL: select * from t2 left join t3 on t2.c1=t3.c1 and t2.c2<t3.c2 where t2.c3>t3.c3;
|
|
|
|
==========================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
----------------------------------------------------------
|
|
|0 |PX COORDINATOR | |23 |699 |
|
|
|1 | EXCHANGE OUT DISTR |:EX10001|23 |689 |
|
|
|2 | HASH JOIN | |23 |665 |
|
|
|3 | EXCHANGE IN DISTR | |200 |310 |
|
|
|4 | EXCHANGE OUT DISTR (PKEY)|:EX10000|200 |261 |
|
|
|5 | PX PARTITION ITERATOR | |200 |155 |
|
|
|6 | TABLE SCAN |t3 |200 |155 |
|
|
|7 | PX PARTITION ITERATOR | |300 |233 |
|
|
|8 | TABLE SCAN |t2 |300 |233 |
|
|
==========================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t2.c1, t2.c2, t2.c3, t3.c1, t3.c2, t3.c3)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t2.c1, t2.c2, t2.c3, t3.c1, t3.c2, t3.c3)]), filter(nil), dop=1
|
|
2 - output([t2.c1], [t3.c1], [t2.c3], [t3.c3], [t2.c2], [t3.c2]), filter(nil),
|
|
equal_conds([t2.c1 = t3.c1]), other_conds([t2.c3 > t3.c3], [t2.c2 < t3.c2])
|
|
3 - output([t3.c1], [t3.c3], [t3.c2]), filter(nil)
|
|
4 - (#keys=1, [t3.c1]), output([t3.c1], [t3.c3], [t3.c2]), filter(nil), dop=1
|
|
5 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
force partition granule.
|
|
6 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
access([t3.c1], [t3.c2], [t3.c3]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t3.c1]), range(MIN ; MAX)always true
|
|
7 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
8 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 18(end) **************
|
|
|
|
*************** Case 19 ***************
|
|
|
|
SQL: select t1.c1 from t1 left join t2 on t1.c1=t2.c1 where t2.c2>1;
|
|
|
|
==========================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
----------------------------------------------------------
|
|
|0 |PX COORDINATOR | |257 |981 |
|
|
|1 | EXCHANGE OUT DISTR |:EX10001|257 |947 |
|
|
|2 | HASH JOIN | |257 |877 |
|
|
|3 | PX PARTITION ITERATOR | |500 |387 |
|
|
|4 | TABLE SCAN |t1 |500 |387 |
|
|
|5 | EXCHANGE IN DISTR | |257 |308 |
|
|
|6 | EXCHANGE OUT DISTR (PKEY)|:EX10000|257 |284 |
|
|
|7 | PX PARTITION ITERATOR | |257 |236 |
|
|
|8 | TABLE SCAN |t2 |257 |236 |
|
|
==========================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1)]), filter(nil), dop=1
|
|
2 - output([t1.c1]), filter(nil),
|
|
equal_conds([t1.c1 = t2.c1]), other_conds(nil)
|
|
3 - output([t1.c1]), filter(nil),
|
|
affinitize, force partition granule.
|
|
4 - output([t1.c1]), filter(nil),
|
|
access([t1.c1]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
5 - output([t2.c1]), filter(nil)
|
|
6 - (#keys=1, [t2.c1]), output([t2.c1]), filter(nil), dop=1
|
|
7 - output([t2.c1]), filter(nil),
|
|
force partition granule.
|
|
8 - output([t2.c1]), filter([t2.c2 > ?]),
|
|
access([t2.c1], [t2.c2]), partitions(p[0-2]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 19(end) **************
|
|
|
|
*************** Case 20 ***************
|
|
|
|
SQL: select * from t1 left join t2 on t1.c1=t2.c1 and t1.c1>1;
|
|
|
|
==========================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
----------------------------------------------------------
|
|
|0 |PX COORDINATOR | |500 |1460|
|
|
|1 | EXCHANGE OUT DISTR |:EX10001|500 |1300|
|
|
|2 | HASH OUTER JOIN | |500 |950 |
|
|
|3 | EXCHANGE IN DISTR | |500 |528 |
|
|
|4 | EXCHANGE OUT DISTR (PKEY)|:EX10000|500 |481 |
|
|
|5 | PX PARTITION ITERATOR | |500 |387 |
|
|
|6 | TABLE SCAN |t1 |500 |387 |
|
|
|7 | PX PARTITION ITERATOR | |285 |232 |
|
|
|8 | TABLE SCAN |t2 |285 |232 |
|
|
==========================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3)]), filter(nil), dop=1
|
|
2 - output([t1.c1], [t2.c1], [t1.c2], [t2.c2], [t2.c3]), filter(nil),
|
|
equal_conds([t1.c1 = t2.c1]), other_conds([t1.c1 > ?])
|
|
3 - output([t1.c1], [t1.c2]), filter(nil)
|
|
4 - (#keys=1, [t1.c1]), output([t1.c1], [t1.c2]), filter(nil), dop=1
|
|
5 - output([t1.c1], [t1.c2]), filter(nil),
|
|
force partition granule.
|
|
6 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
7 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
8 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(1 ; MAX),
|
|
range_cond([t2.c1 > ?])
|
|
|
|
*************** Case 20(end) **************
|
|
|
|
*************** Case 21 ***************
|
|
|
|
SQL: select * from t1 left join t2 on t1.c1>1 where t2.c1 is null;
|
|
|
|
=========================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
---------------------------------------------------------
|
|
|0 |NESTED-LOOP ANTI JOIN | |25 |803 |
|
|
|1 | PX COORDINATOR | |500 |528 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10000|500 |481 |
|
|
|3 | PX PARTITION ITERATOR | |500 |387 |
|
|
|4 | TABLE SCAN |t1 |500 |387 |
|
|
|5 | MATERIAL | |1 |137 |
|
|
|6 | SUBPLAN SCAN |VIEW1 |1 |137 |
|
|
|7 | LIMIT | |1 |137 |
|
|
|8 | PX COORDINATOR | |1 |137 |
|
|
|9 | EXCHANGE OUT DISTR |:EX20000|1 |137 |
|
|
|10| LIMIT | |1 |137 |
|
|
|11| PX PARTITION ITERATOR| |1 |137 |
|
|
|12| TABLE SCAN |t2 |1 |137 |
|
|
=========================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t1.c1], [t1.c2], [?], [?], [?]), filter(nil),
|
|
conds([t1.c1 > ?]), nl_params_(nil), batch_join=false
|
|
1 - output([t1.c1], [t1.c2]), filter(nil)
|
|
2 - output([t1.c1], [t1.c2]), filter(nil), dop=1
|
|
3 - output([t1.c1], [t1.c2]), filter(nil),
|
|
force partition granule.
|
|
4 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
5 - output(nil), filter(nil)
|
|
6 - output(nil), filter(nil),
|
|
access(nil)
|
|
7 - output([1]), filter(nil), limit(1), offset(nil)
|
|
8 - output(nil), filter(nil)
|
|
9 - output(nil), filter(nil), dop=1
|
|
10 - output(nil), filter(nil), limit(1), offset(nil)
|
|
11 - output(nil), filter(nil),
|
|
force partition granule.
|
|
12 - output(nil), filter(nil),
|
|
access([t2.c1]), partitions(p[0-2]),
|
|
limit(1), offset(nil),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 21(end) **************
|
|
|
|
*************** Case 22 ***************
|
|
|
|
SQL: select * from t1 left join t2 on t1.c1>1 where t2.c1 is null and t2.c2>1;
|
|
|
|
=======================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-------------------------------------------------------
|
|
|0 |NESTED-LOOP JOIN CARTESIAN| |150000 |8729|
|
|
|1 | PX COORDINATOR | |300 |464 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10000|300 |391 |
|
|
|3 | PX PARTITION ITERATOR | |300 |233 |
|
|
|4 | TABLE SCAN |t2 |300 |233 |
|
|
|5 | MATERIAL | |500 |531 |
|
|
|6 | PX COORDINATOR | |500 |528 |
|
|
|7 | EXCHANGE OUT DISTR |:EX20000|500 |481 |
|
|
|8 | PX PARTITION ITERATOR | |500 |387 |
|
|
|9 | TABLE SCAN |t1 |500 |387 |
|
|
=======================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), startup_filter([0]),
|
|
conds(nil), nl_params_(nil), batch_join=false
|
|
1 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil)
|
|
2 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1
|
|
3 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
force partition granule.
|
|
4 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
5 - output([t1.c1], [t1.c2]), filter(nil)
|
|
6 - output([t1.c1], [t1.c2]), filter(nil)
|
|
7 - output([t1.c1], [t1.c2]), filter(nil), dop=1
|
|
8 - output([t1.c1], [t1.c2]), filter(nil),
|
|
force partition granule.
|
|
9 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 22(end) **************
|
|
|
|
*************** Case 23 ***************
|
|
|
|
SQL: select /*+no_use_px*/ t1.c1 from t1 left join t2 t on t1.c1=t.c1,t2 left join t3 on t2.c1=t3.c1 where t1.c1=t3.c1;
|
|
|
|
=============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-------------------------------------------------------------
|
|
|0 |PX COORDINATOR | |120 |1198|
|
|
|1 | EXCHANGE OUT DISTR |:EX10002|120 |1183|
|
|
|2 | HASH JOIN | |120 |1150|
|
|
|3 | PX PARTITION ITERATOR | |300 |233 |
|
|
|4 | TABLE SCAN |t2 |300 |233 |
|
|
|5 | EXCHANGE IN DISTR | |200 |798 |
|
|
|6 | EXCHANGE OUT DISTR (PKEY) |:EX10001|200 |779 |
|
|
|7 | HASH JOIN | |200 |741 |
|
|
|8 | EXCHANGE IN DISTR | |200 |187 |
|
|
|9 | EXCHANGE OUT DISTR (PKEY)|:EX10000|200 |176 |
|
|
|10| PX PARTITION ITERATOR | |200 |155 |
|
|
|11| TABLE SCAN |t3 |200 |155 |
|
|
|12| PX PARTITION ITERATOR | |500 |387 |
|
|
|13| TABLE SCAN |t1 |500 |387 |
|
|
=============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1)]), filter(nil), dop=1
|
|
2 - output([t1.c1]), filter(nil),
|
|
equal_conds([t1.c1 = t2.c1]), other_conds(nil)
|
|
3 - output([t2.c1]), filter(nil),
|
|
affinitize, force partition granule.
|
|
4 - output([t2.c1]), filter(nil),
|
|
access([t2.c1]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
5 - output([t1.c1]), filter(nil)
|
|
6 - (#keys=1, [t1.c1]), output([t1.c1]), filter(nil), dop=1
|
|
7 - output([t1.c1]), filter(nil),
|
|
equal_conds([t1.c1 = t3.c1]), other_conds(nil)
|
|
8 - output([t3.c1]), filter(nil)
|
|
9 - (#keys=1, [t3.c1]), output([t3.c1]), filter(nil), dop=1
|
|
10 - output([t3.c1]), filter(nil),
|
|
force partition granule.
|
|
11 - output([t3.c1]), filter(nil),
|
|
access([t3.c1]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t3.c1]), range(MIN ; MAX)always true
|
|
12 - output([t1.c1]), filter(nil),
|
|
affinitize, force partition granule.
|
|
13 - output([t1.c1]), filter(nil),
|
|
access([t1.c1]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 23(end) **************
|
|
|
|
*************** Case 24 ***************
|
|
|
|
SQL: select t1.c1 from t1 left join t2 t on t1.c1=t.c1,t2,t3, t1 tt where t1.c1=t3.c1 and t1.c2=tt.c2 and t1.c1+t2.c1=tt.c1;
|
|
|
|
============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
------------------------------------------------------------
|
|
|0 |NESTED-LOOP JOIN | |487 |7244|
|
|
|1 | HASH JOIN | |811 |1519|
|
|
|2 | PX COORDINATOR | |200 |822 |
|
|
|3 | EXCHANGE OUT DISTR |:EX10001|200 |796 |
|
|
|4 | HASH JOIN | |200 |741 |
|
|
|5 | EXCHANGE IN DISTR | |200 |187 |
|
|
|6 | EXCHANGE OUT DISTR (PKEY)|:EX10000|200 |176 |
|
|
|7 | PX PARTITION ITERATOR | |200 |155 |
|
|
|8 | TABLE SCAN |t3 |200 |155 |
|
|
|9 | PX PARTITION ITERATOR | |500 |387 |
|
|
|10| TABLE SCAN |t1 |500 |387 |
|
|
|11| PX COORDINATOR | |500 |528 |
|
|
|12| EXCHANGE OUT DISTR |:EX20000|500 |481 |
|
|
|13| PX PARTITION ITERATOR | |500 |387 |
|
|
|14| TABLE SCAN |tt |500 |387 |
|
|
|15| MATERIAL | |300 |281 |
|
|
|16| PX COORDINATOR | |300 |280 |
|
|
|17| EXCHANGE OUT DISTR |:EX30000|300 |263 |
|
|
|18| PX PARTITION ITERATOR | |300 |233 |
|
|
|19| TABLE SCAN |t2 |300 |233 |
|
|
============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t1.c1]), filter(nil),
|
|
conds([t1.c1 + t2.c1 = tt.c1]), nl_params_(nil), batch_join=false
|
|
1 - output([t1.c1], [tt.c1]), filter(nil),
|
|
equal_conds([t1.c2 = tt.c2]), other_conds(nil)
|
|
2 - output([t1.c1], [t1.c2]), filter(nil)
|
|
3 - output([t1.c1], [t1.c2]), filter(nil), dop=1
|
|
4 - output([t1.c1], [t1.c2]), filter(nil),
|
|
equal_conds([t1.c1 = t3.c1]), other_conds(nil)
|
|
5 - output([t3.c1]), filter(nil)
|
|
6 - (#keys=1, [t3.c1]), output([t3.c1]), filter(nil), dop=1
|
|
7 - output([t3.c1]), filter(nil),
|
|
force partition granule.
|
|
8 - output([t3.c1]), filter(nil),
|
|
access([t3.c1]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t3.c1]), range(MIN ; MAX)always true
|
|
9 - output([t1.c1], [t1.c2]), filter(nil),
|
|
affinitize, force partition granule.
|
|
10 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
11 - output([tt.c1], [tt.c2]), filter(nil)
|
|
12 - output([tt.c1], [tt.c2]), filter(nil), dop=1
|
|
13 - output([tt.c1], [tt.c2]), filter(nil),
|
|
force partition granule.
|
|
14 - output([tt.c1], [tt.c2]), filter(nil),
|
|
access([tt.c1], [tt.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([tt.c1]), range(MIN ; MAX)always true
|
|
15 - output([t2.c1]), filter(nil)
|
|
16 - output([t2.c1]), filter(nil)
|
|
17 - output([t2.c1]), filter(nil), dop=1
|
|
18 - output([t2.c1]), filter(nil),
|
|
force partition granule.
|
|
19 - output([t2.c1]), filter(nil),
|
|
access([t2.c1]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 24(end) **************
|
|
|
|
*************** Case 25 ***************
|
|
|
|
SQL: select /*+no_use_px*/ t1.c1 from t1 left join t2 t on t1.c1=t.c1,t2 left join t3 on t2.c1=t3.c1, t1 tt where t1.c1=t3.c1 and t1.c2=tt.c2 and t1.c1+t2.c1=tt.c1;
|
|
|
|
================================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
----------------------------------------------------------------
|
|
|0 |PX COORDINATOR | |1 |1596|
|
|
|1 | EXCHANGE OUT DISTR |:EX10003|1 |1596|
|
|
|2 | NESTED-LOOP JOIN | |1 |1595|
|
|
|3 | EXCHANGE IN DISTR | |3 |1579|
|
|
|4 | EXCHANGE OUT DISTR (PKEY) |:EX10002|3 |1579|
|
|
|5 | HASH JOIN | |3 |1578|
|
|
|6 | EXCHANGE IN DISTR | |300 |980 |
|
|
|7 | EXCHANGE OUT DISTR (PKEY) |:EX10001|300 |941 |
|
|
|8 | HASH JOIN | |300 |859 |
|
|
|9 | EXCHANGE IN DISTR | |300 |280 |
|
|
|10| EXCHANGE OUT DISTR (PKEY)|:EX10000|300 |263 |
|
|
|11| PX PARTITION ITERATOR | |300 |233 |
|
|
|12| TABLE SCAN |t2 |300 |233 |
|
|
|13| PX PARTITION ITERATOR | |500 |387 |
|
|
|14| TABLE SCAN |t1 |500 |387 |
|
|
|15| PX PARTITION ITERATOR | |500 |387 |
|
|
|16| TABLE SCAN |tt |500 |387 |
|
|
|17| PX PARTITION ITERATOR | |1 |12 |
|
|
|18| TABLE GET |t3 |1 |12 |
|
|
================================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1)]), filter(nil), dop=1
|
|
2 - output([t1.c1]), filter(nil),
|
|
conds(nil), nl_params_([t1.c1]), batch_join=false
|
|
3 - output([t1.c1], [PARTITION_ID]), filter(nil)
|
|
4 - (#keys=1, [t1.c1]), output([t1.c1], [PARTITION_ID]), filter(nil), dop=1
|
|
5 - output([t1.c1]), filter(nil),
|
|
equal_conds([t1.c1 + t2.c1 = tt.c1], [t1.c2 = tt.c2]), other_conds(nil)
|
|
6 - output([t1.c1], [t1.c1 + t2.c1], [t1.c2]), filter(nil)
|
|
7 - (#keys=1, [t1.c1 + t2.c1]), output([t1.c1], [t1.c1 + t2.c1], [t1.c2]), filter(nil), dop=1
|
|
8 - output([t1.c1], [t2.c1], [t1.c2]), filter(nil),
|
|
equal_conds([t1.c1 = t2.c1]), other_conds(nil)
|
|
9 - output([t2.c1]), filter(nil)
|
|
10 - (#keys=1, [t2.c1]), output([t2.c1]), filter(nil), dop=1
|
|
11 - output([t2.c1]), filter(nil),
|
|
force partition granule.
|
|
12 - output([t2.c1]), filter(nil),
|
|
access([t2.c1]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
13 - output([t1.c1], [t1.c2]), filter(nil),
|
|
affinitize, force partition granule.
|
|
14 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
15 - output([tt.c1], [tt.c2]), filter(nil),
|
|
affinitize, force partition granule.
|
|
16 - output([tt.c1], [tt.c2]), filter(nil),
|
|
access([tt.c1], [tt.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([tt.c1]), range(MIN ; MAX)always true
|
|
17 - output(nil), filter(nil),
|
|
affinitize, force partition granule.
|
|
18 - output(nil), filter(nil),
|
|
access([t3.c1]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t3.c1]), range(MIN ; MAX),
|
|
range_cond([? = t3.c1])
|
|
|
|
*************** Case 25(end) **************
|
|
|
|
*************** Case 26 ***************
|
|
|
|
SQL: select /*+ leading(t2 t1 t3)*/ * from t1, t2, t3 where t1.c1=t2.c1 and t3.c1 = t2.c1;
|
|
|
|
=============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-------------------------------------------------------------
|
|
|0 |PX COORDINATOR | |120 |1756|
|
|
|1 | EXCHANGE OUT DISTR |:EX10002|120 |1691|
|
|
|2 | HASH JOIN | |120 |1545|
|
|
|3 | EXCHANGE IN DISTR | |300 |1263|
|
|
|4 | EXCHANGE OUT DISTR (PKEY) |:EX10001|300 |1167|
|
|
|5 | HASH JOIN | |300 |957 |
|
|
|6 | PX PARTITION ITERATOR | |300 |233 |
|
|
|7 | TABLE SCAN |t2 |300 |233 |
|
|
|8 | EXCHANGE IN DISTR | |500 |528 |
|
|
|9 | EXCHANGE OUT DISTR (PKEY)|:EX10000|500 |481 |
|
|
|10| PX PARTITION ITERATOR | |500 |387 |
|
|
|11| TABLE SCAN |t1 |500 |387 |
|
|
|12| PX PARTITION ITERATOR | |200 |155 |
|
|
|13| TABLE SCAN |t3 |200 |155 |
|
|
=============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3, t3.c1, t3.c2, t3.c3)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3, t3.c1, t3.c2, t3.c3)]), filter(nil), dop=1
|
|
2 - output([t1.c1], [t3.c1], [t2.c1], [t2.c2], [t2.c3], [t1.c2], [t3.c2], [t3.c3]), filter(nil),
|
|
equal_conds([t1.c1 = t3.c1]), other_conds(nil)
|
|
3 - output([t1.c1], [t2.c1], [t2.c2], [t2.c3], [t1.c2]), filter(nil)
|
|
4 - (#keys=1, [t1.c1]), output([t1.c1], [t2.c1], [t2.c2], [t2.c3], [t1.c2]), filter(nil), dop=1
|
|
5 - output([t1.c1], [t2.c1], [t2.c2], [t2.c3], [t1.c2]), filter(nil),
|
|
equal_conds([t1.c1 = t2.c1]), other_conds(nil)
|
|
6 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
7 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
8 - output([t1.c1], [t1.c2]), filter(nil)
|
|
9 - (#keys=1, [t1.c1]), output([t1.c1], [t1.c2]), filter(nil), dop=1
|
|
10 - output([t1.c1], [t1.c2]), filter(nil),
|
|
force partition granule.
|
|
11 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
12 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
13 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
access([t3.c1], [t3.c2], [t3.c3]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t3.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 26(end) **************
|
|
|
|
*************** Case 27 ***************
|
|
|
|
SQL: select /*+ leading(t2)*/ * from t1, t2, t3 where t1.c1=t2.c1 and t3.c1 = t2.c1;
|
|
|
|
=============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-------------------------------------------------------------
|
|
|0 |PX COORDINATOR | |120 |1743|
|
|
|1 | EXCHANGE OUT DISTR |:EX10002|120 |1677|
|
|
|2 | HASH JOIN | |120 |1532|
|
|
|3 | EXCHANGE IN DISTR | |200 |970 |
|
|
|4 | EXCHANGE OUT DISTR (PKEY) |:EX10001|200 |875 |
|
|
|5 | HASH JOIN | |200 |668 |
|
|
|6 | PX PARTITION ITERATOR | |300 |233 |
|
|
|7 | TABLE SCAN |t2 |300 |233 |
|
|
|8 | EXCHANGE IN DISTR | |200 |310 |
|
|
|9 | EXCHANGE OUT DISTR (PKEY)|:EX10000|200 |261 |
|
|
|10| PX PARTITION ITERATOR | |200 |155 |
|
|
|11| TABLE SCAN |t3 |200 |155 |
|
|
|12| PX PARTITION ITERATOR | |500 |387 |
|
|
|13| TABLE SCAN |t1 |500 |387 |
|
|
=============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3, t3.c1, t3.c2, t3.c3)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3, t3.c1, t3.c2, t3.c3)]), filter(nil), dop=1
|
|
2 - output([t1.c1], [t2.c1], [t3.c1], [t2.c2], [t2.c3], [t3.c2], [t3.c3], [t1.c2]), filter(nil),
|
|
equal_conds([t1.c1 = t2.c1]), other_conds(nil)
|
|
3 - output([t2.c1], [t3.c1], [t2.c2], [t2.c3], [t3.c2], [t3.c3]), filter(nil)
|
|
4 - (#keys=1, [t2.c1]), output([t2.c1], [t3.c1], [t2.c2], [t2.c3], [t3.c2], [t3.c3]), filter(nil), dop=1
|
|
5 - output([t2.c1], [t3.c1], [t2.c2], [t2.c3], [t3.c2], [t3.c3]), filter(nil),
|
|
equal_conds([t3.c1 = t2.c1]), other_conds(nil)
|
|
6 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
7 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
8 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil)
|
|
9 - (#keys=1, [t3.c1]), output([t3.c1], [t3.c2], [t3.c3]), filter(nil), dop=1
|
|
10 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
force partition granule.
|
|
11 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
access([t3.c1], [t3.c2], [t3.c3]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t3.c1]), range(MIN ; MAX)always true
|
|
12 - output([t1.c1], [t1.c2]), filter(nil),
|
|
affinitize, force partition granule.
|
|
13 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 27(end) **************
|
|
|
|
*************** Case 28 ***************
|
|
|
|
SQL: select /*+ use_merge(t2)*/ * from t1, t2, t3 where t1.c1=t2.c1 and t3.c1 = t2.c1;
|
|
|
|
=============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-------------------------------------------------------------
|
|
|0 |PX COORDINATOR | |120 |1625|
|
|
|1 | EXCHANGE OUT DISTR |:EX10002|120 |1560|
|
|
|2 | HASH JOIN | |120 |1414|
|
|
|3 | PX PARTITION ITERATOR | |300 |233 |
|
|
|4 | TABLE SCAN |t2 |300 |233 |
|
|
|5 | EXCHANGE IN DISTR | |200 |1057|
|
|
|6 | EXCHANGE OUT DISTR (PKEY) |:EX10001|200 |993 |
|
|
|7 | HASH JOIN | |200 |853 |
|
|
|8 | EXCHANGE IN DISTR | |500 |528 |
|
|
|9 | EXCHANGE OUT DISTR (PKEY)|:EX10000|500 |481 |
|
|
|10| PX PARTITION ITERATOR | |500 |387 |
|
|
|11| TABLE SCAN |t1 |500 |387 |
|
|
|12| PX PARTITION ITERATOR | |200 |155 |
|
|
|13| TABLE SCAN |t3 |200 |155 |
|
|
=============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3, t3.c1, t3.c2, t3.c3)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3, t3.c1, t3.c2, t3.c3)]), filter(nil), dop=1
|
|
2 - output([t1.c1], [t2.c1], [t2.c2], [t2.c3], [t3.c1], [t1.c2], [t3.c2], [t3.c3]), filter(nil),
|
|
equal_conds([t1.c1 = t2.c1]), other_conds(nil)
|
|
3 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
4 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
5 - output([t1.c1], [t3.c1], [t1.c2], [t3.c2], [t3.c3]), filter(nil)
|
|
6 - (#keys=1, [t1.c1]), output([t1.c1], [t3.c1], [t1.c2], [t3.c2], [t3.c3]), filter(nil), dop=1
|
|
7 - output([t1.c1], [t3.c1], [t1.c2], [t3.c2], [t3.c3]), filter(nil),
|
|
equal_conds([t1.c1 = t3.c1]), other_conds(nil)
|
|
8 - output([t1.c1], [t1.c2]), filter(nil)
|
|
9 - (#keys=1, [t1.c1]), output([t1.c1], [t1.c2]), filter(nil), dop=1
|
|
10 - output([t1.c1], [t1.c2]), filter(nil),
|
|
force partition granule.
|
|
11 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
12 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
13 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
access([t3.c1], [t3.c2], [t3.c3]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t3.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 28(end) **************
|
|
|
|
*************** Case 29 ***************
|
|
|
|
SQL: select /*+ use_merge(t1)*/ * from t1, t2, t3 where t1.c1=t2.c1 and t3.c1 = t2.c1;
|
|
|
|
=============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-------------------------------------------------------------
|
|
|0 |PX COORDINATOR | |120 |1625|
|
|
|1 | EXCHANGE OUT DISTR |:EX10002|120 |1559|
|
|
|2 | HASH JOIN | |120 |1414|
|
|
|3 | EXCHANGE IN DISTR | |200 |1057|
|
|
|4 | EXCHANGE OUT DISTR (PKEY) |:EX10001|200 |993 |
|
|
|5 | HASH JOIN | |200 |853 |
|
|
|6 | EXCHANGE IN DISTR | |500 |528 |
|
|
|7 | EXCHANGE OUT DISTR (PKEY)|:EX10000|500 |481 |
|
|
|8 | PX PARTITION ITERATOR | |500 |387 |
|
|
|9 | TABLE SCAN |t1 |500 |387 |
|
|
|10| PX PARTITION ITERATOR | |200 |155 |
|
|
|11| TABLE SCAN |t3 |200 |155 |
|
|
|12| PX PARTITION ITERATOR | |300 |233 |
|
|
|13| TABLE SCAN |t2 |300 |233 |
|
|
=============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3, t3.c1, t3.c2, t3.c3)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3, t3.c1, t3.c2, t3.c3)]), filter(nil), dop=1
|
|
2 - output([t1.c1], [t2.c1], [t3.c1], [t1.c2], [t3.c2], [t3.c3], [t2.c2], [t2.c3]), filter(nil),
|
|
equal_conds([t1.c1 = t2.c1]), other_conds(nil)
|
|
3 - output([t1.c1], [t3.c1], [t1.c2], [t3.c2], [t3.c3]), filter(nil)
|
|
4 - (#keys=1, [t1.c1]), output([t1.c1], [t3.c1], [t1.c2], [t3.c2], [t3.c3]), filter(nil), dop=1
|
|
5 - output([t1.c1], [t3.c1], [t1.c2], [t3.c2], [t3.c3]), filter(nil),
|
|
equal_conds([t1.c1 = t3.c1]), other_conds(nil)
|
|
6 - output([t1.c1], [t1.c2]), filter(nil)
|
|
7 - (#keys=1, [t1.c1]), output([t1.c1], [t1.c2]), filter(nil), dop=1
|
|
8 - output([t1.c1], [t1.c2]), filter(nil),
|
|
force partition granule.
|
|
9 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
10 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
11 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
access([t3.c1], [t3.c2], [t3.c3]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t3.c1]), range(MIN ; MAX)always true
|
|
12 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
13 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 29(end) **************
|
|
|
|
*************** Case 30 ***************
|
|
|
|
SQL: select /*+ use_merge(t2 t3)*/ * from t1, t2, t3 where t1.c1=t2.c1 and t3.c1 = t2.c1;
|
|
|
|
=============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-------------------------------------------------------------
|
|
|0 |PX COORDINATOR | |120 |1626|
|
|
|1 | EXCHANGE OUT DISTR |:EX10002|120 |1561|
|
|
|2 | HASH JOIN | |120 |1415|
|
|
|3 | PX PARTITION ITERATOR | |300 |233 |
|
|
|4 | TABLE SCAN |t2 |300 |233 |
|
|
|5 | EXCHANGE IN DISTR | |200 |1058|
|
|
|6 | EXCHANGE OUT DISTR (PKEY) |:EX10001|200 |994 |
|
|
|7 | HASH JOIN | |200 |854 |
|
|
|8 | PX PARTITION ITERATOR | |200 |155 |
|
|
|9 | TABLE SCAN |t3 |200 |155 |
|
|
|10| EXCHANGE IN DISTR | |500 |528 |
|
|
|11| EXCHANGE OUT DISTR (PKEY)|:EX10000|500 |481 |
|
|
|12| PX PARTITION ITERATOR | |500 |387 |
|
|
|13| TABLE SCAN |t1 |500 |387 |
|
|
=============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3, t3.c1, t3.c2, t3.c3)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3, t3.c1, t3.c2, t3.c3)]), filter(nil), dop=1
|
|
2 - output([t1.c1], [t2.c1], [t2.c2], [t2.c3], [t3.c1], [t3.c2], [t3.c3], [t1.c2]), filter(nil),
|
|
equal_conds([t1.c1 = t2.c1]), other_conds(nil)
|
|
3 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
4 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
5 - output([t1.c1], [t3.c1], [t3.c2], [t3.c3], [t1.c2]), filter(nil)
|
|
6 - (#keys=1, [t1.c1]), output([t1.c1], [t3.c1], [t3.c2], [t3.c3], [t1.c2]), filter(nil), dop=1
|
|
7 - output([t1.c1], [t3.c1], [t3.c2], [t3.c3], [t1.c2]), filter(nil),
|
|
equal_conds([t1.c1 = t3.c1]), other_conds(nil)
|
|
8 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
9 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
access([t3.c1], [t3.c2], [t3.c3]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t3.c1]), range(MIN ; MAX)always true
|
|
10 - output([t1.c1], [t1.c2]), filter(nil)
|
|
11 - (#keys=1, [t1.c1]), output([t1.c1], [t1.c2]), filter(nil), dop=1
|
|
12 - output([t1.c1], [t1.c2]), filter(nil),
|
|
force partition granule.
|
|
13 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 30(end) **************
|
|
|
|
*************** Case 31 ***************
|
|
|
|
SQL: select /*+ use_nl(t2 t3)*/ * from t1, t2, t3 where t1.c1=t2.c1 and t3.c1 = t2.c1;
|
|
|
|
=============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-------------------------------------------------------------
|
|
|0 |PX COORDINATOR | |120 |1626|
|
|
|1 | EXCHANGE OUT DISTR |:EX10002|120 |1561|
|
|
|2 | HASH JOIN | |120 |1415|
|
|
|3 | PX PARTITION ITERATOR | |300 |233 |
|
|
|4 | TABLE SCAN |t2 |300 |233 |
|
|
|5 | EXCHANGE IN DISTR | |200 |1058|
|
|
|6 | EXCHANGE OUT DISTR (PKEY) |:EX10001|200 |994 |
|
|
|7 | HASH JOIN | |200 |854 |
|
|
|8 | PX PARTITION ITERATOR | |200 |155 |
|
|
|9 | TABLE SCAN |t3 |200 |155 |
|
|
|10| EXCHANGE IN DISTR | |500 |528 |
|
|
|11| EXCHANGE OUT DISTR (PKEY)|:EX10000|500 |481 |
|
|
|12| PX PARTITION ITERATOR | |500 |387 |
|
|
|13| TABLE SCAN |t1 |500 |387 |
|
|
=============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3, t3.c1, t3.c2, t3.c3)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3, t3.c1, t3.c2, t3.c3)]), filter(nil), dop=1
|
|
2 - output([t1.c1], [t2.c1], [t2.c2], [t2.c3], [t3.c1], [t3.c2], [t3.c3], [t1.c2]), filter(nil),
|
|
equal_conds([t1.c1 = t2.c1]), other_conds(nil)
|
|
3 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
4 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
5 - output([t1.c1], [t3.c1], [t3.c2], [t3.c3], [t1.c2]), filter(nil)
|
|
6 - (#keys=1, [t1.c1]), output([t1.c1], [t3.c1], [t3.c2], [t3.c3], [t1.c2]), filter(nil), dop=1
|
|
7 - output([t1.c1], [t3.c1], [t3.c2], [t3.c3], [t1.c2]), filter(nil),
|
|
equal_conds([t1.c1 = t3.c1]), other_conds(nil)
|
|
8 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
9 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
access([t3.c1], [t3.c2], [t3.c3]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t3.c1]), range(MIN ; MAX)always true
|
|
10 - output([t1.c1], [t1.c2]), filter(nil)
|
|
11 - (#keys=1, [t1.c1]), output([t1.c1], [t1.c2]), filter(nil), dop=1
|
|
12 - output([t1.c1], [t1.c2]), filter(nil),
|
|
force partition granule.
|
|
13 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 31(end) **************
|
|
|
|
*************** Case 32 ***************
|
|
|
|
SQL: select /*+ use_merge(t2), use_nl(t3)*/ * from t1, t2, t3 where t1.c1=t2.c1 and t3.c1 = t2.c1;
|
|
|
|
=============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-------------------------------------------------------------
|
|
|0 |PX COORDINATOR | |120 |1626|
|
|
|1 | EXCHANGE OUT DISTR |:EX10002|120 |1561|
|
|
|2 | HASH JOIN | |120 |1415|
|
|
|3 | PX PARTITION ITERATOR | |300 |233 |
|
|
|4 | TABLE SCAN |t2 |300 |233 |
|
|
|5 | EXCHANGE IN DISTR | |200 |1058|
|
|
|6 | EXCHANGE OUT DISTR (PKEY) |:EX10001|200 |994 |
|
|
|7 | HASH JOIN | |200 |854 |
|
|
|8 | PX PARTITION ITERATOR | |200 |155 |
|
|
|9 | TABLE SCAN |t3 |200 |155 |
|
|
|10| EXCHANGE IN DISTR | |500 |528 |
|
|
|11| EXCHANGE OUT DISTR (PKEY)|:EX10000|500 |481 |
|
|
|12| PX PARTITION ITERATOR | |500 |387 |
|
|
|13| TABLE SCAN |t1 |500 |387 |
|
|
=============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3, t3.c1, t3.c2, t3.c3)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3, t3.c1, t3.c2, t3.c3)]), filter(nil), dop=1
|
|
2 - output([t1.c1], [t2.c1], [t2.c2], [t2.c3], [t3.c1], [t3.c2], [t3.c3], [t1.c2]), filter(nil),
|
|
equal_conds([t1.c1 = t2.c1]), other_conds(nil)
|
|
3 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
4 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
5 - output([t1.c1], [t3.c1], [t3.c2], [t3.c3], [t1.c2]), filter(nil)
|
|
6 - (#keys=1, [t1.c1]), output([t1.c1], [t3.c1], [t3.c2], [t3.c3], [t1.c2]), filter(nil), dop=1
|
|
7 - output([t1.c1], [t3.c1], [t3.c2], [t3.c3], [t1.c2]), filter(nil),
|
|
equal_conds([t1.c1 = t3.c1]), other_conds(nil)
|
|
8 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
9 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
access([t3.c1], [t3.c2], [t3.c3]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t3.c1]), range(MIN ; MAX)always true
|
|
10 - output([t1.c1], [t1.c2]), filter(nil)
|
|
11 - (#keys=1, [t1.c1]), output([t1.c1], [t1.c2]), filter(nil), dop=1
|
|
12 - output([t1.c1], [t1.c2]), filter(nil),
|
|
force partition granule.
|
|
13 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 32(end) **************
|
|
|
|
*************** Case 33 ***************
|
|
|
|
SQL: select /*+ ordered, use_merge(t2), use_nl(t3)*/ * from t1, t2, t3 where t1.c1=t2.c1 and t3.c1 = t2.c1;
|
|
|
|
===============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
---------------------------------------------------------------
|
|
|0 |PX COORDINATOR | |120 |3527|
|
|
|1 | EXCHANGE OUT DISTR |:EX10002|120 |3461|
|
|
|2 | NESTED-LOOP JOIN | |120 |3316|
|
|
|3 | EXCHANGE IN DISTR | |300 |1304|
|
|
|4 | EXCHANGE OUT DISTR (PKEY) |:EX10001|300 |1208|
|
|
|5 | MERGE JOIN | |300 |998 |
|
|
|6 | EXCHANGE IN MERGE SORT DISTR| |500 |528 |
|
|
|7 | EXCHANGE OUT DISTR (PKEY) |:EX10000|500 |481 |
|
|
|8 | PX PARTITION ITERATOR | |500 |387 |
|
|
|9 | TABLE SCAN |t1 |500 |387 |
|
|
|10| SORT | |300 |299 |
|
|
|11| PX PARTITION ITERATOR | |300 |233 |
|
|
|12| TABLE SCAN |t2 |300 |233 |
|
|
|13| PX PARTITION ITERATOR | |1 |12 |
|
|
|14| TABLE GET |t3 |1 |12 |
|
|
===============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3, t3.c1, t3.c2, t3.c3)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3, t3.c1, t3.c2, t3.c3)]), filter(nil), dop=1
|
|
2 - output([t1.c1], [t2.c1], [t1.c2], [t2.c2], [t2.c3], [t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
conds(nil), nl_params_([t1.c1]), batch_join=false
|
|
3 - output([t1.c1], [PARTITION_ID], [t2.c1], [t1.c2], [t2.c2], [t2.c3]), filter(nil)
|
|
4 - (#keys=1, [t1.c1]), output([t1.c1], [PARTITION_ID], [t2.c1], [t1.c2], [t2.c2], [t2.c3]), filter(nil), dop=1
|
|
5 - output([t1.c1], [t2.c1], [t1.c2], [t2.c2], [t2.c3]), filter(nil),
|
|
equal_conds([t1.c1 = t2.c1]), other_conds(nil)
|
|
6 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), Local Order
|
|
7 - (#keys=1, [t1.c1]), output([t1.c1], [t1.c2]), filter(nil), dop=1
|
|
8 - output([t1.c1], [t1.c2]), filter(nil),
|
|
force partition granule.
|
|
9 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
10 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), sort_keys([t2.c1, ASC]), local merge sort
|
|
11 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
12 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
13 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
14 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
access([t3.c1], [t3.c2], [t3.c3]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t3.c1]), range(MIN ; MAX),
|
|
range_cond([? = t3.c1])
|
|
|
|
*************** Case 33(end) **************
|
|
|
|
*************** Case 34 ***************
|
|
|
|
SQL: select /*+ use_nl(t2), use_merge(t3)*/ * from t1 join t2 on t1.c1 = t2.c1 join t3 on t2.c1 = t3.c1;
|
|
|
|
=============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-------------------------------------------------------------
|
|
|0 |PX COORDINATOR | |120 |1626|
|
|
|1 | EXCHANGE OUT DISTR |:EX10002|120 |1561|
|
|
|2 | HASH JOIN | |120 |1415|
|
|
|3 | PX PARTITION ITERATOR | |300 |233 |
|
|
|4 | TABLE SCAN |t2 |300 |233 |
|
|
|5 | EXCHANGE IN DISTR | |200 |1058|
|
|
|6 | EXCHANGE OUT DISTR (PKEY) |:EX10001|200 |994 |
|
|
|7 | HASH JOIN | |200 |854 |
|
|
|8 | PX PARTITION ITERATOR | |200 |155 |
|
|
|9 | TABLE SCAN |t3 |200 |155 |
|
|
|10| EXCHANGE IN DISTR | |500 |528 |
|
|
|11| EXCHANGE OUT DISTR (PKEY)|:EX10000|500 |481 |
|
|
|12| PX PARTITION ITERATOR | |500 |387 |
|
|
|13| TABLE SCAN |t1 |500 |387 |
|
|
=============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3, t3.c1, t3.c2, t3.c3)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3, t3.c1, t3.c2, t3.c3)]), filter(nil), dop=1
|
|
2 - output([t1.c1], [t2.c1], [t2.c2], [t2.c3], [t3.c1], [t3.c2], [t3.c3], [t1.c2]), filter(nil),
|
|
equal_conds([t1.c1 = t2.c1]), other_conds(nil)
|
|
3 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
4 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
5 - output([t1.c1], [t3.c1], [t3.c2], [t3.c3], [t1.c2]), filter(nil)
|
|
6 - (#keys=1, [t1.c1]), output([t1.c1], [t3.c1], [t3.c2], [t3.c3], [t1.c2]), filter(nil), dop=1
|
|
7 - output([t1.c1], [t3.c1], [t3.c2], [t3.c3], [t1.c2]), filter(nil),
|
|
equal_conds([t3.c1 = t1.c1]), other_conds(nil)
|
|
8 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
9 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
access([t3.c1], [t3.c2], [t3.c3]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t3.c1]), range(MIN ; MAX)always true
|
|
10 - output([t1.c1], [t1.c2]), filter(nil)
|
|
11 - (#keys=1, [t1.c1]), output([t1.c1], [t1.c2]), filter(nil), dop=1
|
|
12 - output([t1.c1], [t1.c2]), filter(nil),
|
|
force partition granule.
|
|
13 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 34(end) **************
|
|
|
|
*************** Case 35 ***************
|
|
|
|
SQL: select /*+ use_nl(t2), use_merge(t3)*/ * from t1, t2, t3 where t1.c1=t2.c1 and t3.c1 = t2.c1;
|
|
|
|
=============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-------------------------------------------------------------
|
|
|0 |PX COORDINATOR | |120 |1626|
|
|
|1 | EXCHANGE OUT DISTR |:EX10002|120 |1561|
|
|
|2 | HASH JOIN | |120 |1415|
|
|
|3 | PX PARTITION ITERATOR | |300 |233 |
|
|
|4 | TABLE SCAN |t2 |300 |233 |
|
|
|5 | EXCHANGE IN DISTR | |200 |1058|
|
|
|6 | EXCHANGE OUT DISTR (PKEY) |:EX10001|200 |994 |
|
|
|7 | HASH JOIN | |200 |854 |
|
|
|8 | PX PARTITION ITERATOR | |200 |155 |
|
|
|9 | TABLE SCAN |t3 |200 |155 |
|
|
|10| EXCHANGE IN DISTR | |500 |528 |
|
|
|11| EXCHANGE OUT DISTR (PKEY)|:EX10000|500 |481 |
|
|
|12| PX PARTITION ITERATOR | |500 |387 |
|
|
|13| TABLE SCAN |t1 |500 |387 |
|
|
=============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3, t3.c1, t3.c2, t3.c3)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3, t3.c1, t3.c2, t3.c3)]), filter(nil), dop=1
|
|
2 - output([t1.c1], [t2.c1], [t2.c2], [t2.c3], [t3.c1], [t3.c2], [t3.c3], [t1.c2]), filter(nil),
|
|
equal_conds([t1.c1 = t2.c1]), other_conds(nil)
|
|
3 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
4 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
5 - output([t1.c1], [t3.c1], [t3.c2], [t3.c3], [t1.c2]), filter(nil)
|
|
6 - (#keys=1, [t1.c1]), output([t1.c1], [t3.c1], [t3.c2], [t3.c3], [t1.c2]), filter(nil), dop=1
|
|
7 - output([t1.c1], [t3.c1], [t3.c2], [t3.c3], [t1.c2]), filter(nil),
|
|
equal_conds([t1.c1 = t3.c1]), other_conds(nil)
|
|
8 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
9 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
access([t3.c1], [t3.c2], [t3.c3]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t3.c1]), range(MIN ; MAX)always true
|
|
10 - output([t1.c1], [t1.c2]), filter(nil)
|
|
11 - (#keys=1, [t1.c1]), output([t1.c1], [t1.c2]), filter(nil), dop=1
|
|
12 - output([t1.c1], [t1.c2]), filter(nil),
|
|
force partition granule.
|
|
13 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 35(end) **************
|
|
|
|
*************** Case 36 ***************
|
|
|
|
SQL: select /*+ ordered, use_nl(t2), use_merge(t3)*/ * from t1, t2, t3 where t1.c1=t2.c1 and t3.c1 = t2.c1;
|
|
|
|
=============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-------------------------------------------------------------
|
|
|0 |PX COORDINATOR | |120 |4674|
|
|
|1 | EXCHANGE OUT DISTR |:EX10002|120 |4609|
|
|
|2 | MERGE JOIN | |120 |4464|
|
|
|3 | EXCHANGE IN MERGE SORT DISTR | |300 |4167|
|
|
|4 | EXCHANGE OUT DISTR (PKEY) |:EX10001|300 |4071|
|
|
|5 | NESTED-LOOP JOIN | |300 |3861|
|
|
|6 | EXCHANGE IN DISTR | |500 |528 |
|
|
|7 | EXCHANGE OUT DISTR (PKEY)|:EX10000|500 |481 |
|
|
|8 | PX PARTITION ITERATOR | |500 |387 |
|
|
|9 | TABLE SCAN |t1 |500 |387 |
|
|
|10| PX PARTITION ITERATOR | |1 |18 |
|
|
|11| TABLE GET |t2 |1 |18 |
|
|
|12| SORT | |200 |199 |
|
|
|13| PX PARTITION ITERATOR | |200 |155 |
|
|
|14| TABLE SCAN |t3 |200 |155 |
|
|
=============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3, t3.c1, t3.c2, t3.c3)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3, t3.c1, t3.c2, t3.c3)]), filter(nil), dop=1
|
|
2 - output([t1.c1], [t3.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3], [t3.c2], [t3.c3]), filter(nil),
|
|
equal_conds([t1.c1 = t3.c1]), other_conds(nil)
|
|
3 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), sort_keys([t1.c1, ASC]), Local Order
|
|
4 - (#keys=1, [t1.c1]), output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1
|
|
5 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
conds(nil), nl_params_([t1.c1]), batch_join=false
|
|
6 - output([t1.c1], [PARTITION_ID], [t1.c2]), filter(nil)
|
|
7 - (#keys=1, [t1.c1]), output([t1.c1], [PARTITION_ID], [t1.c2]), filter(nil), dop=1
|
|
8 - output([t1.c1], [t1.c2]), filter(nil),
|
|
force partition granule.
|
|
9 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
10 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
11 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX),
|
|
range_cond([? = t2.c1])
|
|
12 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil), sort_keys([t3.c1, ASC]), local merge sort
|
|
13 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
14 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
access([t3.c1], [t3.c2], [t3.c3]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t3.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 36(end) **************
|
|
|
|
*************** Case 37 ***************
|
|
|
|
SQL: select /*+ ordered, use_merge(t3) */ * from t2, t3 where t2.c2 = t3.c1 and t2.c1 = 0 and t3.c1 = 0;
|
|
|
|
===================================================
|
|
|ID|OPERATOR |NAME|EST. ROWS|COST|
|
|
---------------------------------------------------
|
|
|0 |NESTED-LOOP JOIN CARTESIAN| |1 |50 |
|
|
|1 | TABLE GET |t2 |1 |46 |
|
|
|2 | TABLE GET |t3 |1 |46 |
|
|
===================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t2.c1], [t2.c2], [t2.c3], [t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
conds(nil), nl_params_(nil), batch_join=false
|
|
1 - output([t2.c1], [t2.c2], [t2.c3]), filter([t2.c2 = ?]),
|
|
access([t2.c1], [t2.c2], [t2.c3]), partitions(p0),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t2.c1]), range[0 ; 0],
|
|
range_cond([t2.c1 = ?])
|
|
2 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
access([t3.c1], [t3.c2], [t3.c3]), partitions(p0),
|
|
is_index_back=false,
|
|
range_key([t3.c1]), range[0 ; 0],
|
|
range_cond([t3.c1 = ?])
|
|
|
|
*************** Case 37(end) **************
|
|
|
|
*************** Case 38 ***************
|
|
|
|
SQL: select /*+ use_merge(t3) */ * from t2, t3 where t2.c1 = t3.c2 and t2.c1 = 0 and t3.c1 = 0;
|
|
|
|
===================================================
|
|
|ID|OPERATOR |NAME|EST. ROWS|COST|
|
|
---------------------------------------------------
|
|
|0 |NESTED-LOOP JOIN CARTESIAN| |1 |50 |
|
|
|1 | TABLE GET |t3 |1 |46 |
|
|
|2 | TABLE GET |t2 |1 |46 |
|
|
===================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t2.c1], [t2.c2], [t2.c3], [t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
conds(nil), nl_params_(nil), batch_join=false
|
|
1 - output([t3.c1], [t3.c2], [t3.c3]), filter([? = t3.c2]),
|
|
access([t3.c1], [t3.c2], [t3.c3]), partitions(p0),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t3.c1]), range[0 ; 0],
|
|
range_cond([t3.c1 = ?])
|
|
2 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
access([t2.c1], [t2.c2], [t2.c3]), partitions(p0),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range[0 ; 0],
|
|
range_cond([t2.c1 = ?])
|
|
|
|
*************** Case 38(end) **************
|
|
|
|
*************** Case 39 ***************
|
|
|
|
SQL: select /*+ index(t5 idx_t5_c2) */ t5.c2 from t5, t1 where t5.c2 = t1.c2;
|
|
|
|
==========================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
----------------------------------------------------------
|
|
|0 |HASH JOIN | |1216 |938 |
|
|
|1 | PX COORDINATOR | |300 |280 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10000 |300 |263 |
|
|
|3 | PX PARTITION ITERATOR| |300 |233 |
|
|
|4 | TABLE SCAN |t5(idx_t5_c2)|300 |233 |
|
|
|5 | PX COORDINATOR | |500 |466 |
|
|
|6 | EXCHANGE OUT DISTR |:EX20000 |500 |439 |
|
|
|7 | PX PARTITION ITERATOR| |500 |387 |
|
|
|8 | TABLE SCAN |t1(idx_t1_c2)|500 |387 |
|
|
==========================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t5.c2]), filter(nil),
|
|
equal_conds([t5.c2 = t1.c2]), other_conds(nil)
|
|
1 - output([t5.c2]), filter(nil)
|
|
2 - output([t5.c2]), filter(nil), dop=1
|
|
3 - output([t5.c2]), filter(nil),
|
|
force partition granule.
|
|
4 - output([t5.c2]), filter(nil),
|
|
access([t5.c2]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t5.c2], [t5.c3]), range(MIN,MIN ; MAX,MAX)always true
|
|
5 - output([t1.c2]), filter(nil)
|
|
6 - output([t1.c2]), filter(nil), dop=1
|
|
7 - output([t1.c2]), filter(nil),
|
|
force partition granule.
|
|
8 - output([t1.c2]), filter(nil),
|
|
access([t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c2], [t1.c1]), range(MIN,MIN ; MAX,MAX)always true
|
|
|
|
*************** Case 39(end) **************
|
|
|
|
*************** Case 40 ***************
|
|
|
|
SQL: select c1, c2 from t1 ignore index (idx_t1_c2) where c1 =2 or c2 = 5;
|
|
|
|
====================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
----------------------------------------------------
|
|
|0 |PX COORDINATOR | |6 |402 |
|
|
|1 | EXCHANGE OUT DISTR |:EX10000|6 |401 |
|
|
|2 | PX PARTITION ITERATOR| |6 |400 |
|
|
|3 | TABLE SCAN |t1 |6 |400 |
|
|
====================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2)]), filter(nil), dop=1
|
|
2 - output([t1.c1], [t1.c2]), filter(nil),
|
|
force partition granule.
|
|
3 - output([t1.c1], [t1.c2]), filter([t1.c1 = ? OR t1.c2 = ?]),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 40(end) **************
|
|
|
|
*************** Case 41 ***************
|
|
|
|
SQL: select t5.c2 from t5, t1 ignore index (idx_t5_c2) where t5.c2 = t1.c2;
|
|
|
|
==========================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
----------------------------------------------------------
|
|
|0 |HASH JOIN | |1216 |938 |
|
|
|1 | PX COORDINATOR | |300 |280 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10000 |300 |263 |
|
|
|3 | PX PARTITION ITERATOR| |300 |233 |
|
|
|4 | TABLE SCAN |t5(idx_t5_c2)|300 |233 |
|
|
|5 | PX COORDINATOR | |500 |466 |
|
|
|6 | EXCHANGE OUT DISTR |:EX20000 |500 |439 |
|
|
|7 | PX PARTITION ITERATOR| |500 |387 |
|
|
|8 | TABLE SCAN |t1(idx_t1_c2)|500 |387 |
|
|
==========================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t5.c2]), filter(nil),
|
|
equal_conds([t5.c2 = t1.c2]), other_conds(nil)
|
|
1 - output([t5.c2]), filter(nil)
|
|
2 - output([t5.c2]), filter(nil), dop=1
|
|
3 - output([t5.c2]), filter(nil),
|
|
force partition granule.
|
|
4 - output([t5.c2]), filter(nil),
|
|
access([t5.c2]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t5.c2], [t5.c3]), range(MIN,MIN ; MAX,MAX)always true
|
|
5 - output([t1.c2]), filter(nil)
|
|
6 - output([t1.c2]), filter(nil), dop=1
|
|
7 - output([t1.c2]), filter(nil),
|
|
force partition granule.
|
|
8 - output([t1.c2]), filter(nil),
|
|
access([t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c2], [t1.c1]), range(MIN,MIN ; MAX,MAX)always true
|
|
|
|
*************** Case 41(end) **************
|
|
|
|
*************** Case 42 ***************
|
|
|
|
SQL: select * from t1 right join t2 on t1.c1=t2.c1 and t1.c1>1;
|
|
|
|
==========================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
----------------------------------------------------------
|
|
|0 |PX COORDINATOR | |300 |1246|
|
|
|1 | EXCHANGE OUT DISTR |:EX10001|300 |1150|
|
|
|2 | HASH RIGHT OUTER JOIN | |300 |941 |
|
|
|3 | EXCHANGE IN DISTR | |475 |520 |
|
|
|4 | EXCHANGE OUT DISTR (PKEY)|:EX10000|475 |476 |
|
|
|5 | PX PARTITION ITERATOR | |475 |387 |
|
|
|6 | TABLE SCAN |t1 |475 |387 |
|
|
|7 | PX PARTITION ITERATOR | |300 |233 |
|
|
|8 | TABLE SCAN |t2 |300 |233 |
|
|
==========================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3)]), filter(nil), dop=1
|
|
2 - output([t1.c1], [t2.c1], [t1.c2], [t2.c2], [t2.c3]), filter(nil),
|
|
equal_conds([t1.c1 = t2.c1]), other_conds(nil)
|
|
3 - output([t1.c1], [t1.c2]), filter(nil)
|
|
4 - (#keys=1, [t1.c1]), output([t1.c1], [t1.c2]), filter(nil), dop=1
|
|
5 - output([t1.c1], [t1.c2]), filter(nil),
|
|
force partition granule.
|
|
6 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(1 ; MAX),
|
|
range_cond([t1.c1 > ?])
|
|
7 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
8 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 42(end) **************
|
|
|
|
*************** Case 43 ***************
|
|
|
|
SQL: select * from t1 full join t2 on t1.c1=t2.c1 and t1.c1>1;
|
|
|
|
==========================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
----------------------------------------------------------
|
|
|0 |PX COORDINATOR | |500 |1464|
|
|
|1 | EXCHANGE OUT DISTR |:EX10001|500 |1304|
|
|
|2 | HASH FULL OUTER JOIN | |500 |954 |
|
|
|3 | EXCHANGE IN DISTR | |500 |528 |
|
|
|4 | EXCHANGE OUT DISTR (PKEY)|:EX10000|500 |481 |
|
|
|5 | PX PARTITION ITERATOR | |500 |387 |
|
|
|6 | TABLE SCAN |t1 |500 |387 |
|
|
|7 | PX PARTITION ITERATOR | |300 |233 |
|
|
|8 | TABLE SCAN |t2 |300 |233 |
|
|
==========================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3)]), filter(nil), dop=1
|
|
2 - output([t1.c1], [t2.c1], [t1.c2], [t2.c2], [t2.c3]), filter(nil),
|
|
equal_conds([t1.c1 = t2.c1]), other_conds([t1.c1 > ?])
|
|
3 - output([t1.c1], [t1.c2]), filter(nil)
|
|
4 - (#keys=1, [t1.c1]), output([t1.c1], [t1.c2]), filter(nil), dop=1
|
|
5 - output([t1.c1], [t1.c2]), filter(nil),
|
|
force partition granule.
|
|
6 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
7 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
8 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 43(end) **************
|
|
|
|
*************** Case 44 ***************
|
|
|
|
SQL: select * from t1 where c1 in (select c1 from t2);
|
|
|
|
==========================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
----------------------------------------------------------
|
|
|0 |PX COORDINATOR | |300 |980 |
|
|
|1 | EXCHANGE OUT DISTR |:EX10001|300 |941 |
|
|
|2 | HASH JOIN | |300 |859 |
|
|
|3 | EXCHANGE IN DISTR | |300 |280 |
|
|
|4 | EXCHANGE OUT DISTR (PKEY)|:EX10000|300 |263 |
|
|
|5 | PX PARTITION ITERATOR | |300 |233 |
|
|
|6 | TABLE SCAN |t2 |300 |233 |
|
|
|7 | PX PARTITION ITERATOR | |500 |387 |
|
|
|8 | TABLE SCAN |t1 |500 |387 |
|
|
==========================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2)]), filter(nil), dop=1
|
|
2 - output([t1.c1], [t1.c2]), filter(nil),
|
|
equal_conds([t1.c1 = t2.c1]), other_conds(nil)
|
|
3 - output([t2.c1]), filter(nil)
|
|
4 - (#keys=1, [t2.c1]), output([t2.c1]), filter(nil), dop=1
|
|
5 - output([t2.c1]), filter(nil),
|
|
force partition granule.
|
|
6 - output([t2.c1]), filter(nil),
|
|
access([t2.c1]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
7 - output([t1.c1], [t1.c2]), filter(nil),
|
|
affinitize, force partition granule.
|
|
8 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 44(end) **************
|
|
|
|
*************** Case 45 ***************
|
|
|
|
SQL: select c1, c2 from t1 where exists (select * from t2 where t2.c1 = t1.c1);
|
|
|
|
==========================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
----------------------------------------------------------
|
|
|0 |PX COORDINATOR | |300 |980 |
|
|
|1 | EXCHANGE OUT DISTR |:EX10001|300 |941 |
|
|
|2 | HASH JOIN | |300 |859 |
|
|
|3 | EXCHANGE IN DISTR | |300 |280 |
|
|
|4 | EXCHANGE OUT DISTR (PKEY)|:EX10000|300 |263 |
|
|
|5 | PX PARTITION ITERATOR | |300 |233 |
|
|
|6 | TABLE SCAN |t2 |300 |233 |
|
|
|7 | PX PARTITION ITERATOR | |500 |387 |
|
|
|8 | TABLE SCAN |t1 |500 |387 |
|
|
==========================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2)]), filter(nil), dop=1
|
|
2 - output([t1.c1], [t1.c2]), filter(nil),
|
|
equal_conds([t2.c1 = t1.c1]), other_conds(nil)
|
|
3 - output([t2.c1]), filter(nil)
|
|
4 - (#keys=1, [t2.c1]), output([t2.c1]), filter(nil), dop=1
|
|
5 - output([t2.c1]), filter(nil),
|
|
force partition granule.
|
|
6 - output([t2.c1]), filter(nil),
|
|
access([t2.c1]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
7 - output([t1.c1], [t1.c2]), filter(nil),
|
|
affinitize, force partition granule.
|
|
8 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 45(end) **************
|
|
|
|
*************** Case 46 ***************
|
|
|
|
SQL: select * from t1 where c1 not in (select c1 from t2);
|
|
|
|
==========================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
----------------------------------------------------------
|
|
|0 |PX COORDINATOR | |200 |961 |
|
|
|1 | EXCHANGE OUT DISTR |:EX10001|200 |942 |
|
|
|2 | HASH RIGHT ANTI JOIN | |200 |904 |
|
|
|3 | EXCHANGE IN DISTR | |300 |280 |
|
|
|4 | EXCHANGE OUT DISTR (PKEY)|:EX10000|300 |263 |
|
|
|5 | PX PARTITION ITERATOR | |300 |233 |
|
|
|6 | TABLE SCAN |t2 |300 |233 |
|
|
|7 | PX PARTITION ITERATOR | |500 |387 |
|
|
|8 | TABLE SCAN |t1 |500 |387 |
|
|
==========================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2)]), filter(nil), dop=1
|
|
2 - output([t1.c1], [t1.c2]), filter(nil),
|
|
equal_conds([t1.c1 = t2.c1]), other_conds(nil)
|
|
3 - output([t2.c1]), filter(nil)
|
|
4 - (#keys=1, [t2.c1]), output([t2.c1]), filter(nil), dop=1
|
|
5 - output([t2.c1]), filter(nil),
|
|
force partition granule.
|
|
6 - output([t2.c1]), filter(nil),
|
|
access([t2.c1]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
7 - output([t1.c1], [t1.c2]), filter(nil),
|
|
affinitize, force partition granule.
|
|
8 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 46(end) **************
|
|
|
|
*************** Case 47 ***************
|
|
|
|
SQL: select c1, c2 from t1 where not exists (select * from t2 where t2.c1 = t1.c1);
|
|
|
|
==========================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
----------------------------------------------------------
|
|
|0 |PX COORDINATOR | |200 |961 |
|
|
|1 | EXCHANGE OUT DISTR |:EX10001|200 |942 |
|
|
|2 | HASH RIGHT ANTI JOIN | |200 |904 |
|
|
|3 | EXCHANGE IN DISTR | |300 |280 |
|
|
|4 | EXCHANGE OUT DISTR (PKEY)|:EX10000|300 |263 |
|
|
|5 | PX PARTITION ITERATOR | |300 |233 |
|
|
|6 | TABLE SCAN |t2 |300 |233 |
|
|
|7 | PX PARTITION ITERATOR | |500 |387 |
|
|
|8 | TABLE SCAN |t1 |500 |387 |
|
|
==========================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2)]), filter(nil), dop=1
|
|
2 - output([t1.c1], [t1.c2]), filter(nil),
|
|
equal_conds([t2.c1 = t1.c1]), other_conds(nil)
|
|
3 - output([t2.c1]), filter(nil)
|
|
4 - (#keys=1, [t2.c1]), output([t2.c1]), filter(nil), dop=1
|
|
5 - output([t2.c1]), filter(nil),
|
|
force partition granule.
|
|
6 - output([t2.c1]), filter(nil),
|
|
access([t2.c1]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
7 - output([t1.c1], [t1.c2]), filter(nil),
|
|
affinitize, force partition granule.
|
|
8 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 47(end) **************
|
|
|
|
*************** Case 48 ***************
|
|
|
|
SQL: select t1.c1 from t1, t2 where t1.c1 + t2.c1 = 5;
|
|
|
|
======================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
------------------------------------------------------
|
|
|0 |NESTED-LOOP JOIN | |750 |3180|
|
|
|1 | PX COORDINATOR | |300 |280 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10000|300 |263 |
|
|
|3 | PX PARTITION ITERATOR | |300 |233 |
|
|
|4 | TABLE SCAN |t2 |300 |233 |
|
|
|5 | MATERIAL | |500 |468 |
|
|
|6 | PX COORDINATOR | |500 |466 |
|
|
|7 | EXCHANGE OUT DISTR |:EX20000|500 |439 |
|
|
|8 | PX PARTITION ITERATOR| |500 |387 |
|
|
|9 | TABLE SCAN |t1 |500 |387 |
|
|
======================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t1.c1]), filter(nil),
|
|
conds([t1.c1 + t2.c1 = ?]), nl_params_(nil), batch_join=false
|
|
1 - output([t2.c1]), filter(nil)
|
|
2 - output([t2.c1]), filter(nil), dop=1
|
|
3 - output([t2.c1]), filter(nil),
|
|
force partition granule.
|
|
4 - output([t2.c1]), filter(nil),
|
|
access([t2.c1]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
5 - output([t1.c1]), filter(nil)
|
|
6 - output([t1.c1]), filter(nil)
|
|
7 - output([t1.c1]), filter(nil), dop=1
|
|
8 - output([t1.c1]), filter(nil),
|
|
force partition granule.
|
|
9 - output([t1.c1]), filter(nil),
|
|
access([t1.c1]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 48(end) **************
|
|
|
|
*************** Case 49 ***************
|
|
|
|
SQL: select /*+ use_nl(t2)*/ * from t1 , t2 where t1.c1= t2.c1;
|
|
|
|
==========================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
----------------------------------------------------------
|
|
|0 |PX COORDINATOR | |300 |1263|
|
|
|1 | EXCHANGE OUT DISTR |:EX10001|300 |1167|
|
|
|2 | HASH JOIN | |300 |957 |
|
|
|3 | PX PARTITION ITERATOR | |300 |233 |
|
|
|4 | TABLE SCAN |t2 |300 |233 |
|
|
|5 | EXCHANGE IN DISTR | |500 |528 |
|
|
|6 | EXCHANGE OUT DISTR (PKEY)|:EX10000|500 |481 |
|
|
|7 | PX PARTITION ITERATOR | |500 |387 |
|
|
|8 | TABLE SCAN |t1 |500 |387 |
|
|
==========================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3)]), filter(nil), dop=1
|
|
2 - output([t1.c1], [t2.c1], [t2.c2], [t2.c3], [t1.c2]), filter(nil),
|
|
equal_conds([t1.c1 = t2.c1]), other_conds(nil)
|
|
3 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
4 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
5 - output([t1.c1], [t1.c2]), filter(nil)
|
|
6 - (#keys=1, [t1.c1]), output([t1.c1], [t1.c2]), filter(nil), dop=1
|
|
7 - output([t1.c1], [t1.c2]), filter(nil),
|
|
force partition granule.
|
|
8 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 49(end) **************
|
|
|
|
*************** Case 50 ***************
|
|
|
|
SQL: select /*+ use_nl(t2)*/ * from t1 join t2 on t2.c1 = 1 and t1.c1= t2.c1;
|
|
|
|
=====================================================
|
|
|ID|OPERATOR |NAME|EST. ROWS|COST|
|
|
-----------------------------------------------------
|
|
|0 |EXCHANGE IN REMOTE | |1 |93 |
|
|
|1 | EXCHANGE OUT REMOTE | |1 |93 |
|
|
|2 | NESTED-LOOP JOIN CARTESIAN| |1 |92 |
|
|
|3 | TABLE GET |t1 |1 |46 |
|
|
|4 | TABLE GET |t2 |1 |46 |
|
|
=====================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil)
|
|
1 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil)
|
|
2 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
conds(nil), nl_params_(nil), batch_join=false
|
|
3 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p1),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range[1 ; 1],
|
|
range_cond([t1.c1 = ?])
|
|
4 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
access([t2.c1], [t2.c2], [t2.c3]), partitions(p1),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range[1 ; 1],
|
|
range_cond([t2.c1 = ?])
|
|
|
|
*************** Case 50(end) **************
|
|
|
|
*************** Case 51 ***************
|
|
|
|
SQL: select /*+ use_nl(t2)*/ * from t1 , t2 where t1.c1 + t2.c1 = t2.c2;
|
|
|
|
======================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
------------------------------------------------------
|
|
|0 |NESTED-LOOP JOIN | |1351 |3053|
|
|
|1 | PX COORDINATOR | |300 |464 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10000|300 |391 |
|
|
|3 | PX PARTITION ITERATOR | |300 |233 |
|
|
|4 | TABLE SCAN |t2 |300 |233 |
|
|
|5 | MATERIAL | |500 |531 |
|
|
|6 | PX COORDINATOR | |500 |528 |
|
|
|7 | EXCHANGE OUT DISTR |:EX20000|500 |481 |
|
|
|8 | PX PARTITION ITERATOR| |500 |387 |
|
|
|9 | TABLE SCAN |t1 |500 |387 |
|
|
======================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
conds([t1.c1 + t2.c1 = t2.c2]), nl_params_(nil), batch_join=false
|
|
1 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil)
|
|
2 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1
|
|
3 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
force partition granule.
|
|
4 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
5 - output([t1.c1], [t1.c2]), filter(nil)
|
|
6 - output([t1.c1], [t1.c2]), filter(nil)
|
|
7 - output([t1.c1], [t1.c2]), filter(nil), dop=1
|
|
8 - output([t1.c1], [t1.c2]), filter(nil),
|
|
force partition granule.
|
|
9 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 51(end) **************
|
|
|
|
*************** Case 52 ***************
|
|
|
|
SQL: select /*+ use_nl(t2), use_nl(t3)*/ * from t1 , t2, t3 where t1.c1 + t2.c1 = t2.c2 and t1.c1 + t2.c1 = t3.c1;
|
|
|
|
============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
------------------------------------------------------------
|
|
|0 |NESTED-LOOP JOIN | |1216 |5011|
|
|
|1 | PX COORDINATOR | |271 |2650|
|
|
|2 | EXCHANGE OUT DISTR |:EX10001|271 |2523|
|
|
|3 | NESTED-LOOP JOIN | |271 |2242|
|
|
|4 | PX PARTITION ITERATOR | |200 |155 |
|
|
|5 | TABLE SCAN |t3 |200 |155 |
|
|
|6 | MATERIAL | |300 |471 |
|
|
|7 | EXCHANGE IN DISTR | |300 |464 |
|
|
|8 | EXCHANGE OUT DISTR (PKEY)|:EX10000|300 |391 |
|
|
|9 | PX PARTITION ITERATOR | |300 |233 |
|
|
|10| TABLE SCAN |t2 |300 |233 |
|
|
|11| MATERIAL | |500 |531 |
|
|
|12| PX COORDINATOR | |500 |528 |
|
|
|13| EXCHANGE OUT DISTR |:EX20000|500 |481 |
|
|
|14| PX PARTITION ITERATOR | |500 |387 |
|
|
|15| TABLE SCAN |t1 |500 |387 |
|
|
============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3], [t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
conds([t1.c1 + t2.c1 = t3.c1]), nl_params_(nil), batch_join=false
|
|
1 - output([t2.c1], [t2.c2], [t2.c3], [t3.c1], [t3.c2], [t3.c3]), filter(nil)
|
|
2 - output([t2.c1], [t2.c2], [t2.c3], [t3.c1], [t3.c2], [t3.c3]), filter(nil), dop=1
|
|
3 - output([t2.c1], [t2.c2], [t2.c3], [t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
conds([t2.c2 = t3.c1]), nl_params_(nil), batch_join=false
|
|
4 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
5 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
access([t3.c1], [t3.c2], [t3.c3]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t3.c1]), range(MIN ; MAX)always true
|
|
6 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil)
|
|
7 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil)
|
|
8 - (#keys=1, [t2.c2]), output([t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1
|
|
9 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
force partition granule.
|
|
10 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
11 - output([t1.c1], [t1.c2]), filter(nil)
|
|
12 - output([t1.c1], [t1.c2]), filter(nil)
|
|
13 - output([t1.c1], [t1.c2]), filter(nil), dop=1
|
|
14 - output([t1.c1], [t1.c2]), filter(nil),
|
|
force partition granule.
|
|
15 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 52(end) **************
|
|
|
|
*************** Case 53 ***************
|
|
|
|
SQL: select t1.c1 from t1 left join t2 on t1.c1 = t2.c1 where exists (select c1 from t3 limit 1);
|
|
|
|
=======================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-------------------------------------------------------
|
|
|0 |SUBPLAN FILTER | |500 |566 |
|
|
|1 | PX COORDINATOR | |500 |466 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10000|500 |439 |
|
|
|3 | PX PARTITION ITERATOR | |500 |387 |
|
|
|4 | TABLE SCAN |t1 |500 |387 |
|
|
|5 | LIMIT | |1 |91 |
|
|
|6 | PX COORDINATOR | |1 |91 |
|
|
|7 | EXCHANGE OUT DISTR |:EX20000|1 |91 |
|
|
|8 | LIMIT | |1 |91 |
|
|
|9 | PX PARTITION ITERATOR| |1 |91 |
|
|
|10| TABLE SCAN |t3 |1 |91 |
|
|
=======================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t1.c1]), filter(nil),
|
|
exec_params_(nil), onetime_exprs_([(T_OP_EXISTS, subquery(1))]), init_plan_idxs_(nil)
|
|
1 - output([t1.c1]), filter(nil)
|
|
2 - output([t1.c1]), filter(nil), dop=1
|
|
3 - output([t1.c1]), filter(nil),
|
|
force partition granule.
|
|
4 - output([t1.c1]), filter(nil), startup_filter([?]),
|
|
access([t1.c1]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
5 - output([1]), filter(nil), limit(1), offset(nil)
|
|
6 - output(nil), filter(nil)
|
|
7 - output(nil), filter(nil), dop=1
|
|
8 - output(nil), filter(nil), limit(1), offset(nil)
|
|
9 - output(nil), filter(nil),
|
|
force partition granule.
|
|
10 - output(nil), filter(nil),
|
|
access([t3.c1]), partitions(p[0-1]),
|
|
limit(1), offset(nil),
|
|
is_index_back=false,
|
|
range_key([t3.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 53(end) **************
|
|
|
|
*************** Case 54 ***************
|
|
|
|
SQL: select t1.c1 from t1 left join t2 on t2.c1 = 5;
|
|
|
|
=============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-------------------------------------------------------------
|
|
|0 |NESTED-LOOP OUTER JOIN CARTESIAN| |500 |649 |
|
|
|1 | PX COORDINATOR | |500 |466 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10000|500 |439 |
|
|
|3 | PX PARTITION ITERATOR | |500 |387 |
|
|
|4 | TABLE SCAN |t1 |500 |387 |
|
|
|5 | MATERIAL | |1 |46 |
|
|
|6 | PX COORDINATOR | |1 |46 |
|
|
|7 | EXCHANGE OUT DISTR |:EX20000|1 |46 |
|
|
|8 | TABLE GET |t2 |1 |46 |
|
|
=============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t1.c1]), filter(nil),
|
|
conds(nil), nl_params_(nil), batch_join=false
|
|
1 - output([t1.c1]), filter(nil)
|
|
2 - output([t1.c1]), filter(nil), dop=1
|
|
3 - output([t1.c1]), filter(nil),
|
|
force partition granule.
|
|
4 - output([t1.c1]), filter(nil),
|
|
access([t1.c1]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
5 - output(nil), filter(nil)
|
|
6 - output(nil), filter(nil)
|
|
7 - output(nil), filter(nil), is_single, dop=1
|
|
8 - output(nil), filter(nil),
|
|
access([t2.c1]), partitions(p2),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range[5 ; 5],
|
|
range_cond([t2.c1 = ?])
|
|
|
|
*************** Case 54(end) **************
|
|
|
|
*************** Case 55 ***************
|
|
|
|
SQL: select /*+no_use_px*/ t1.c1 from t1 left join t2 tt2 on t1.c1 = tt2.c1, t3 tt3 left join t4 on tt3.c1=t4.c1 , t2 left join t3 on t3.c1 = 5 ;
|
|
|
|
==================================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST |
|
|
------------------------------------------------------------------
|
|
|0 |NESTED-LOOP JOIN CARTESIAN | |30000000 |1556011|
|
|
|1 | NESTED-LOOP JOIN CARTESIAN | |60000 |8522 |
|
|
|2 | NESTED-LOOP OUTER JOIN CARTESIAN| |300 |408 |
|
|
|3 | PX COORDINATOR | |300 |280 |
|
|
|4 | EXCHANGE OUT DISTR |:EX10000|300 |263 |
|
|
|5 | PX PARTITION ITERATOR | |300 |233 |
|
|
|6 | TABLE SCAN |t2 |300 |233 |
|
|
|7 | MATERIAL | |1 |46 |
|
|
|8 | PX COORDINATOR | |1 |46 |
|
|
|9 | EXCHANGE OUT DISTR |:EX20000|1 |46 |
|
|
|10| TABLE GET |t3 |1 |46 |
|
|
|11| MATERIAL | |200 |378 |
|
|
|12| PX COORDINATOR | |200 |377 |
|
|
|13| EXCHANGE OUT DISTR |:EX30001|200 |358 |
|
|
|14| HASH RIGHT OUTER JOIN | |200 |320 |
|
|
|15| EXCHANGE IN DISTR | |100 |94 |
|
|
|16| EXCHANGE OUT DISTR (PKEY) |:EX30000|100 |88 |
|
|
|17| TABLE SCAN |t4 |100 |78 |
|
|
|18| PX PARTITION ITERATOR | |200 |155 |
|
|
|19| TABLE SCAN |tt3 |200 |155 |
|
|
|20| MATERIAL | |500 |468 |
|
|
|21| PX COORDINATOR | |500 |466 |
|
|
|22| EXCHANGE OUT DISTR |:EX40000|500 |439 |
|
|
|23| PX PARTITION ITERATOR | |500 |387 |
|
|
|24| TABLE SCAN |t1 |500 |387 |
|
|
==================================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t1.c1]), filter(nil),
|
|
conds(nil), nl_params_(nil), batch_join=false
|
|
1 - output(nil), filter(nil),
|
|
conds(nil), nl_params_(nil), batch_join=false
|
|
2 - output(nil), filter(nil),
|
|
conds(nil), nl_params_(nil), batch_join=false
|
|
3 - output(nil), filter(nil)
|
|
4 - output(nil), filter(nil), dop=1
|
|
5 - output(nil), filter(nil),
|
|
force partition granule.
|
|
6 - output(nil), filter(nil),
|
|
access([t2.c1]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
7 - output(nil), filter(nil)
|
|
8 - output(nil), filter(nil)
|
|
9 - output(nil), filter(nil), is_single, dop=1
|
|
10 - output(nil), filter(nil),
|
|
access([t3.c1]), partitions(p1),
|
|
is_index_back=false,
|
|
range_key([t3.c1]), range[5 ; 5],
|
|
range_cond([t3.c1 = ?])
|
|
11 - output(nil), filter(nil)
|
|
12 - output(nil), filter(nil)
|
|
13 - output(nil), filter(nil), dop=1
|
|
14 - output(nil), filter(nil),
|
|
equal_conds([tt3.c1 = t4.c1]), other_conds(nil)
|
|
15 - output([t4.c1]), filter(nil)
|
|
16 - (#keys=1, [t4.c1]), output([t4.c1]), filter(nil), is_single, dop=1
|
|
17 - output([t4.c1]), filter(nil),
|
|
access([t4.c1]), partitions(p0),
|
|
is_index_back=false,
|
|
range_key([t4.c1], [t4.c2]), range(MIN,MIN ; MAX,MAX)always true
|
|
18 - output([tt3.c1]), filter(nil),
|
|
affinitize, force partition granule.
|
|
19 - output([tt3.c1]), filter(nil),
|
|
access([tt3.c1]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([tt3.c1]), range(MIN ; MAX)always true
|
|
20 - output([t1.c1]), filter(nil)
|
|
21 - output([t1.c1]), filter(nil)
|
|
22 - output([t1.c1]), filter(nil), dop=1
|
|
23 - output([t1.c1]), filter(nil),
|
|
force partition granule.
|
|
24 - output([t1.c1]), filter(nil),
|
|
access([t1.c1]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 55(end) **************
|
|
|
|
*************** Case 56 ***************
|
|
|
|
SQL: select t1.c1 from t1 left join (select t2.c1 as a1, t3.c1 as a2 from t2 left join t3 on t3.c1 = 5) as a on a.a1 = 3;
|
|
|
|
===============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
---------------------------------------------------------------
|
|
|0 |NESTED-LOOP OUTER JOIN CARTESIAN | |500 |745 |
|
|
|1 | PX COORDINATOR | |500 |466 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10000|500 |439 |
|
|
|3 | PX PARTITION ITERATOR | |500 |387 |
|
|
|4 | TABLE SCAN |t1 |500 |387 |
|
|
|5 | MATERIAL | |1 |141 |
|
|
|6 | NESTED-LOOP OUTER JOIN CARTESIAN| |1 |141 |
|
|
|7 | TABLE GET |t2 |1 |46 |
|
|
|8 | PX COORDINATOR | |1 |46 |
|
|
|9 | EXCHANGE OUT DISTR |:EX20000|1 |46 |
|
|
|10| TABLE GET |t3 |1 |46 |
|
|
===============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t1.c1]), filter(nil),
|
|
conds(nil), nl_params_(nil), batch_join=false
|
|
1 - output([t1.c1]), filter(nil)
|
|
2 - output([t1.c1]), filter(nil), dop=1
|
|
3 - output([t1.c1]), filter(nil),
|
|
force partition granule.
|
|
4 - output([t1.c1]), filter(nil),
|
|
access([t1.c1]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
5 - output(nil), filter(nil)
|
|
6 - output(nil), filter(nil),
|
|
conds(nil), nl_params_(nil), batch_join=false
|
|
7 - output(nil), filter(nil),
|
|
access([t2.c1]), partitions(p0),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range[3 ; 3],
|
|
range_cond([t2.c1 = ?])
|
|
8 - output(nil), filter(nil)
|
|
9 - output(nil), filter(nil), is_single, dop=1
|
|
10 - output(nil), filter(nil),
|
|
access([t3.c1]), partitions(p1),
|
|
is_index_back=false,
|
|
range_key([t3.c1]), range[5 ; 5],
|
|
range_cond([t3.c1 = ?])
|
|
|
|
*************** Case 56(end) **************
|
|
|
|
*************** Case 57 ***************
|
|
|
|
SQL: select t1.c1 from t1 left join (t2 left join t3 on t2.c1 = t3.c1) on t2.c1 = 1;
|
|
|
|
=============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-------------------------------------------------------------
|
|
|0 |NESTED-LOOP OUTER JOIN CARTESIAN| |500 |649 |
|
|
|1 | PX COORDINATOR | |500 |466 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10000|500 |439 |
|
|
|3 | PX PARTITION ITERATOR | |500 |387 |
|
|
|4 | TABLE SCAN |t1 |500 |387 |
|
|
|5 | MATERIAL | |1 |46 |
|
|
|6 | PX COORDINATOR | |1 |46 |
|
|
|7 | EXCHANGE OUT DISTR |:EX20000|1 |46 |
|
|
|8 | TABLE GET |t2 |1 |46 |
|
|
=============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t1.c1]), filter(nil),
|
|
conds(nil), nl_params_(nil), batch_join=false
|
|
1 - output([t1.c1]), filter(nil)
|
|
2 - output([t1.c1]), filter(nil), dop=1
|
|
3 - output([t1.c1]), filter(nil),
|
|
force partition granule.
|
|
4 - output([t1.c1]), filter(nil),
|
|
access([t1.c1]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
5 - output(nil), filter(nil)
|
|
6 - output(nil), filter(nil)
|
|
7 - output(nil), filter(nil), is_single, dop=1
|
|
8 - output(nil), filter(nil),
|
|
access([t2.c1]), partitions(p1),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range[1 ; 1],
|
|
range_cond([t2.c1 = ?])
|
|
|
|
*************** Case 57(end) **************
|
|
|
|
*************** Case 58 ***************
|
|
|
|
SQL: select /*+leading(t1 t2) use_mj(t1 t2)*/ t1.c1, t2.c1 from tr t1 inner join tr t2 on t1.c1 = t2.c1 order by t1.c1 desc;
|
|
|
|
==========================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
----------------------------------------------------------
|
|
|0 |PX COORDINATOR MERGE SORT | |730 |864 |
|
|
|1 | EXCHANGE OUT DISTR |:EX10000 |730 |796 |
|
|
|2 | PX PARTITION ITERATOR | |730 |659 |
|
|
|3 | MERGE JOIN | |730 |659 |
|
|
|4 | TABLE SCAN |t1(Reverse)|300 |233 |
|
|
|5 | TABLE SCAN |t2(Reverse)|300 |233 |
|
|
==========================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1, t2.c1)]), filter(nil), sort_keys([t1.c1, DESC])
|
|
1 - output([t1.c1], [INTERNAL_FUNCTION(t1.c1, t2.c1)]), filter(nil), dop=1
|
|
2 - output([t1.c1], [t2.c1]), filter(nil),
|
|
partition wise, force partition granule, desc.
|
|
3 - output([t1.c1], [t2.c1]), filter(nil),
|
|
equal_conds([t1.c1 = t2.c1]), other_conds(nil)
|
|
4 - output([t1.c1]), filter(nil),
|
|
access([t1.c1]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t1.c1], [t1.c2]), range(MIN,MIN ; MAX,MAX)always true
|
|
5 - output([t2.c1]), filter(nil),
|
|
access([t2.c1]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1], [t2.c2]), range(MIN,MIN ; MAX,MAX)always true
|
|
|
|
*************** Case 58(end) **************
|
|
|
|
*************** Case 59 ***************
|
|
|
|
SQL: use oceanbase;
|
|
*************** Case 60 ***************
|
|
|
|
SQL: select * from __all_virtual_zone_stat where zone='zone1';
|
|
|
|
=========================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST |
|
|
---------------------------------------------------------
|
|
|0 |TABLE SCAN|__all_virtual_zone_stat|100000 |2000000|
|
|
=========================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([__all_virtual_zone_stat.zone], [__all_virtual_zone_stat.is_merging], [__all_virtual_zone_stat.status], [__all_virtual_zone_stat.server_count], [__all_virtual_zone_stat.resource_pool_count], [__all_virtual_zone_stat.unit_count], [__all_virtual_zone_stat.cluster], [__all_virtual_zone_stat.region], [__all_virtual_zone_stat.spare1], [__all_virtual_zone_stat.spare2], [__all_virtual_zone_stat.spare3], [__all_virtual_zone_stat.spare4], [__all_virtual_zone_stat.spare5], [__all_virtual_zone_stat.spare6]), filter([__all_virtual_zone_stat.zone = ?]),
|
|
access([__all_virtual_zone_stat.zone], [__all_virtual_zone_stat.is_merging], [__all_virtual_zone_stat.status], [__all_virtual_zone_stat.server_count], [__all_virtual_zone_stat.resource_pool_count], [__all_virtual_zone_stat.unit_count], [__all_virtual_zone_stat.cluster], [__all_virtual_zone_stat.region], [__all_virtual_zone_stat.spare1], [__all_virtual_zone_stat.spare2], [__all_virtual_zone_stat.spare3], [__all_virtual_zone_stat.spare4], [__all_virtual_zone_stat.spare5], [__all_virtual_zone_stat.spare6]), partitions(p0),
|
|
is_index_back=false, filter_before_indexback[false]
|
|
|
|
*************** Case 60(end) **************
|
|
|
|
*************** Case 61 ***************
|
|
|
|
SQL: select /*+leading(t2 t1) use_nl(t1 t2)*/ t1.c1, t2.c1 from opt.t4 t1 inner join opt.t2 as t2 on t1.c1 = t2.c1;
|
|
|
|
=====================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-----------------------------------------------------
|
|
|0 |NESTED-LOOP JOIN | |90 |2479|
|
|
|1 | PX COORDINATOR | |300 |280 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10000|300 |263 |
|
|
|3 | PX PARTITION ITERATOR| |300 |233 |
|
|
|4 | TABLE SCAN |t2 |300 |233 |
|
|
|5 | TABLE SCAN |t1 |9 |5 |
|
|
=====================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t1.c1], [t2.c1]), filter(nil),
|
|
conds(nil), nl_params_([t2.c1]), batch_join=true
|
|
1 - output([t2.c1]), filter(nil)
|
|
2 - output([t2.c1]), filter(nil), dop=1
|
|
3 - output([t2.c1]), filter(nil),
|
|
force partition granule.
|
|
4 - output([t2.c1]), filter(nil),
|
|
access([t2.c1]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
5 - output([t1.c1]), filter(nil),
|
|
access([t1.c1]), partitions(p0),
|
|
is_index_back=false,
|
|
range_key([t1.c1], [t1.c2]), range(MIN ; MAX),
|
|
range_cond([t1.c1 = ?])
|
|
|
|
*************** Case 61(end) **************
|
|
|
|
*************** Case 62 ***************
|
|
|
|
SQL: select /*+leading(opt.t1 opt.t2) use_nl(t1 t2)*/ t1.c1, t2.c1 from opt.t1 as t1 inner join opt.t2 as t2 on t1.c1 = t2.c2 order by t1.c1 desc, t2.c1 desc;
|
|
|
|
===============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
---------------------------------------------------------------
|
|
|0 |PX COORDINATOR MERGE SORT | |270 |5023|
|
|
|1 | EXCHANGE OUT DISTR |:EX10001 |270 |4988|
|
|
|2 | SORT | |270 |4914|
|
|
|3 | NESTED-LOOP JOIN | |270 |4727|
|
|
|4 | PX PARTITION ITERATOR | |500 |387 |
|
|
|5 | TABLE SCAN |t1(Reverse)|500 |387 |
|
|
|6 | MATERIAL | |300 |319 |
|
|
|7 | EXCHANGE IN DISTR | |300 |317 |
|
|
|8 | EXCHANGE OUT DISTR (PKEY)|:EX10000 |300 |289 |
|
|
|9 | PX PARTITION ITERATOR | |300 |233 |
|
|
|10| TABLE SCAN |t2 |300 |233 |
|
|
===============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1, t2.c1)]), filter(nil), sort_keys([t1.c1, DESC], [t2.c1, DESC])
|
|
1 - output([t1.c1], [t2.c1], [INTERNAL_FUNCTION(t1.c1, t2.c1)]), filter(nil), dop=1
|
|
2 - output([t1.c1], [t2.c1]), filter(nil), sort_keys([t1.c1, DESC], [t2.c1, DESC])
|
|
3 - output([t1.c1], [t2.c1]), filter(nil),
|
|
conds([t1.c1 = t2.c2]), nl_params_(nil), batch_join=false
|
|
4 - output([t1.c1]), filter(nil),
|
|
affinitize, force partition granule.
|
|
5 - output([t1.c1]), filter(nil),
|
|
access([t1.c1]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
6 - output([t2.c1], [t2.c2]), filter(nil)
|
|
7 - output([t2.c1], [t2.c2]), filter(nil)
|
|
8 - (#keys=1, [t2.c2]), output([t2.c1], [t2.c2]), filter(nil), dop=1
|
|
9 - output([t2.c1], [t2.c2]), filter(nil),
|
|
force partition granule.
|
|
10 - output([t2.c1], [t2.c2]), filter(nil),
|
|
access([t2.c1], [t2.c2]), partitions(p[0-2]),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 62(end) **************
|
|
|
|
*************** Case 63 ***************
|
|
|
|
SQL: select /*+use_nl(opt.t1 opt.t2 opt.t3)*/ * from opt.t1 as t1 left join opt.t2 as t2 on t1.c1 = t2.c1 and t1.c1 = 1 and t2.c1 = 1 left join opt.t3 as t3 on t2.c1 = t3.c1 and t3.c1 in (1, 2) order by t1.c1;
|
|
|
|
==============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
--------------------------------------------------------------
|
|
|0 |PX COORDINATOR MERGE SORT | |500 |1832|
|
|
|1 | EXCHANGE OUT DISTR |:EX10002|500 |1559|
|
|
|2 | SORT | |500 |954 |
|
|
|3 | HASH OUTER JOIN | |500 |562 |
|
|
|4 | PX PARTITION ITERATOR | |500 |387 |
|
|
|5 | TABLE SCAN |t1 |500 |387 |
|
|
|6 | EXCHANGE IN DISTR | |1 |53 |
|
|
|7 | EXCHANGE OUT DISTR (PKEY) |:EX10001|1 |52 |
|
|
|8 | NESTED-LOOP OUTER JOIN | |1 |51 |
|
|
|9 | EXCHANGE IN DISTR | |1 |47 |
|
|
|10| EXCHANGE OUT DISTR (PKEY)|:EX10000|1 |46 |
|
|
|11| TABLE GET |t2 |1 |46 |
|
|
|12| PX PARTITION ITERATOR | |2 |7 |
|
|
|13| TABLE GET |t3 |2 |7 |
|
|
==============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3, t3.c1, t3.c2, t3.c3)]), filter(nil), sort_keys([t1.c1, ASC])
|
|
1 - output([t1.c1], [INTERNAL_FUNCTION(t1.c1, t1.c2, t2.c1, t2.c2, t2.c3, t3.c1, t3.c2, t3.c3)]), filter(nil), dop=1
|
|
2 - output([t1.c1], [t2.c1], [t1.c2], [t2.c2], [t2.c3], [t3.c1], [t3.c2], [t3.c3]), filter(nil), sort_keys([t1.c1, ASC])
|
|
3 - output([t1.c1], [t2.c1], [t1.c2], [t2.c2], [t2.c3], [t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
equal_conds([t1.c1 = t2.c1]), other_conds(nil)
|
|
4 - output([t1.c1], [t1.c2]), filter(nil),
|
|
affinitize, force partition granule.
|
|
5 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
6 - output([t2.c1], [t2.c2], [t2.c3], [t3.c1], [t3.c2], [t3.c3]), filter(nil)
|
|
7 - (#keys=1, [t2.c1]), output([t2.c1], [t2.c2], [t2.c3], [t3.c1], [t3.c2], [t3.c3]), filter(nil), dop=1
|
|
8 - output([t2.c1], [t2.c2], [t2.c3], [t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
conds(nil), nl_params_([t2.c1]), batch_join=false
|
|
9 - output([t2.c1], [PARTITION_ID], [t2.c2], [t2.c3]), filter(nil)
|
|
10 - (#keys=1, [t2.c1]), output([t2.c1], [PARTITION_ID], [t2.c2], [t2.c3]), filter(nil), is_single, dop=1
|
|
11 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
|
|
access([t2.c1], [t2.c2], [t2.c3]), partitions(p1),
|
|
is_index_back=false,
|
|
range_key([t2.c1]), range[1 ; 1],
|
|
range_cond([t2.c1 = ?], [t2.c1 = ?])
|
|
12 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
13 - output([t3.c1], [t3.c2], [t3.c3]), filter(nil),
|
|
access([t3.c1], [t3.c2], [t3.c3]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t3.c1]), range(MIN ; MAX),
|
|
range_cond([t3.c1 IN (?, ?)], [? = t3.c1])
|
|
|
|
*************** Case 63(end) **************
|
|
|