268 lines
12 KiB
Plaintext
268 lines
12 KiB
Plaintext
*************** Case 1 ***************
|
|
|
|
SQL: explain extended select * from t1 order by c1,c2 limit 100;
|
|
|
|
========================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
--------------------------------------------------------
|
|
|0 |LIMIT | |100 |279 |
|
|
|1 | PX COORDINATOR MERGE SORT | |100 |278 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10000|100 |268 |
|
|
|3 | TOP-N SORT | |100 |250 |
|
|
|4 | PX PARTITION ITERATOR | |100 |229 |
|
|
|5 | TABLE SCAN |t1 |100 |229 |
|
|
========================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t1.c1], [t1.c2]), filter(nil), limit(100), offset(nil)
|
|
1 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC])
|
|
2 - output([t1.c1], [t1.c2]), filter(nil), dop=1
|
|
3 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), topn(100), local merge sort
|
|
4 - output([t1.c1], [t1.c2]), filter(nil),
|
|
force partition granule.
|
|
5 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
limit(100), offset(nil),
|
|
is_index_back=false,
|
|
range_key([t1.c1]), range(MIN ; MAX)always true
|
|
|
|
*************** Case 1(end) **************
|
|
|
|
*************** Case 2 ***************
|
|
|
|
SQL: explain extended select c2, sum(c1) from t1 group by c2;
|
|
|
|
=================================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-----------------------------------------------------------------
|
|
|0 |PX COORDINATOR | |100 |528 |
|
|
|1 | EXCHANGE OUT DISTR |:EX10001 |100 |509 |
|
|
|2 | MERGE GROUP BY | |100 |469 |
|
|
|3 | EXCHANGE IN MERGE SORT DISTR| |100 |462 |
|
|
|4 | EXCHANGE OUT DISTR (HASH) |:EX10000 |100 |448 |
|
|
|5 | PX PARTITION ITERATOR | |100 |418 |
|
|
|6 | MERGE GROUP BY | |100 |418 |
|
|
|7 | TABLE SCAN |t1(idx_t1_c2)|500 |387 |
|
|
=================================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(t1.c2, T_FUN_SUM(T_FUN_SUM(t1.c1)))]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(t1.c2, T_FUN_SUM(T_FUN_SUM(t1.c1)))]), filter(nil), dop=1
|
|
2 - output([t1.c2], [T_FUN_SUM(T_FUN_SUM(t1.c1))]), filter(nil),
|
|
group([t1.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(t1.c1))])
|
|
3 - output([t1.c2], [T_FUN_SUM(t1.c1)]), filter(nil), sort_keys([t1.c2, ASC]), Local Order
|
|
4 - (#keys=1, [t1.c2]), output([t1.c2], [T_FUN_SUM(t1.c1)]), filter(nil), dop=1
|
|
5 - output([t1.c2], [T_FUN_SUM(t1.c1)]), filter(nil),
|
|
force partition granule.
|
|
6 - output([t1.c2], [T_FUN_SUM(t1.c1)]), filter(nil),
|
|
group([t1.c2]), agg_func([T_FUN_SUM(t1.c1)])
|
|
7 - output([t1.c1], [t1.c2]), filter(nil),
|
|
access([t1.c1], [t1.c2]), partitions(p[0-4]),
|
|
is_index_back=false,
|
|
range_key([t1.c2], [t1.c1]), range(MIN,MIN ; MAX,MAX)always true
|
|
|
|
*************** Case 2(end) **************
|
|
|
|
*************** Case 3 ***************
|
|
|
|
SQL: explain extended 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 3(end) **************
|
|
|
|
*************** Case 4 ***************
|
|
|
|
SQL: explain extended 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 > 1]),
|
|
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 4(end) **************
|
|
|
|
*************** Case 5 ***************
|
|
|
|
SQL: explain extended 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 5(end) **************
|
|
|