*************** 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.c2t3.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) **************