*************** Case 1 *************** SQL: select /*+ log_level(debug)*/ * from hint.t1; =================================== |ID|OPERATOR |NAME|EST. ROWS|COST| ----------------------------------- |0 |TABLE SCAN|t1 |100 |78 | =================================== Outputs & filters: ------------------------------------- 0 - output([t1.a], [t1.b]), filter(nil), access([t1.a], [t1.b]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA FULL(@"SEL$1" "hint"."t1"@"SEL$1") <<<<<<< HEAD LOG_LEVEL("debug") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LOG_LEVEL('debug') >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 1(end) ************** *************** Case 2 *************** SQL: select /*+ log_level('sql.opt:debug')*/ * from hint.t1; =================================== |ID|OPERATOR |NAME|EST. ROWS|COST| ----------------------------------- |0 |TABLE SCAN|t1 |100 |78 | =================================== Outputs & filters: ------------------------------------- 0 - output([t1.a], [t1.b]), filter(nil), access([t1.a], [t1.b]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA FULL(@"SEL$1" "hint"."t1"@"SEL$1") <<<<<<< HEAD LOG_LEVEL("sql.opt:debug") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LOG_LEVEL('sql.opt:debug') >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 2(end) ************** *************** Case 3 *************** SQL: select /*+ leading(ta, tb) use_nl(tb)*/ * from hint.t1 as tb, opt.t1 as ta where tb.a = ta.c1; ===================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ----------------------------------------------------- |0 |NESTED-LOOP JOIN | |100 |3241| |1 | PX COORDINATOR | |500 |528 | |2 | EXCHANGE OUT DISTR |:EX10000|500 |481 | |3 | PX PARTITION ITERATOR| |500 |387 | |4 | TABLE SCAN |ta |500 |387 | |5 | TABLE GET |tb |1 |5 | ===================================================== Outputs & filters: ------------------------------------- 0 - output([tb.a], [tb.b], [ta.c1], [ta.c2]), filter(nil), conds(nil), nl_params_([ta.c1]) 1 - output([ta.c1], [ta.c2]), filter(nil) 2 - output([ta.c1], [ta.c2]), filter(nil), dop=1 3 - output([ta.c1], [ta.c2]), filter(nil) 4 - output([ta.c1], [ta.c2]), filter(nil), access([ta.c1], [ta.c2]), partitions(p[0-4]) 5 - output([tb.a], [tb.b]), filter(nil), access([tb.a], [tb.b]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("opt"."ta"@"SEL$1" "hint"."tb"@"SEL$1")) USE_NL(@"SEL$1" "hint"."tb"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "hint"."tb"@"SEL$1" LOCAL LOCAL) FULL(@"SEL$1" "opt"."ta"@"SEL$1") FULL(@"SEL$1" "hint"."tb"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.ta"@"SEL$1" "hint.tb"@"SEL$1" )) USE_NL(@"SEL$1" ("hint.tb"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.tb"@"SEL$1" ) LOCAL LOCAL) NO_USE_NL_MATERIALIZATION(@"SEL$1" ("hint.tb"@"SEL$1" )) FULL(@"SEL$1" "opt"."ta"@"SEL$1") FULL(@"SEL$1" "hint"."tb"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 3(end) ************** *************** Case 4 *************** SQL: select /*+ leading(ta, tb) use_bnl(tb)*/ * from hint.t1 as tb, opt.t1 as ta where tb.a = ta.c1; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |PX COORDINATOR | |100 |692 | |1 | EXCHANGE OUT DISTR |:EX10001|100 |675 | |2 | HASH JOIN | |100 |639 | |3 | PX PARTITION ITERATOR | |500 |387 | |4 | TABLE SCAN |ta |500 |387 | |5 | EXCHANGE IN DISTR | |100 |106 | |6 | EXCHANGE OUT DISTR (PKEY)|:EX10000|100 |97 | |7 | TABLE SCAN |tb |100 |78 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(tb.a, tb.b, ta.c1, ta.c2)]), filter(nil) 1 - output([INTERNAL_FUNCTION(tb.a, tb.b, ta.c1, ta.c2)]), filter(nil), dop=1 2 - output([tb.a], [ta.c1], [ta.c2], [tb.b]), filter(nil), equal_conds([tb.a = ta.c1]), other_conds(nil) 3 - output([ta.c1], [ta.c2]), filter(nil) 4 - output([ta.c1], [ta.c2]), filter(nil), access([ta.c1], [ta.c2]), partitions(p[0-4]) 5 - output([tb.a], [tb.b]), filter(nil) 6 - (#keys=1, [tb.a]), output([tb.a], [tb.b]), filter(nil), is_single, dop=1 7 - output([tb.a], [tb.b]), filter(nil), access([tb.a], [tb.b]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("opt"."ta"@"SEL$1" "hint"."tb"@"SEL$1")) USE_HASH(@"SEL$1" "hint"."tb"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "hint"."tb"@"SEL$1" NONE PARTITION) FULL(@"SEL$1" "opt"."ta"@"SEL$1") FULL(@"SEL$1" "hint"."tb"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.ta"@"SEL$1" "hint.tb"@"SEL$1" )) USE_HASH(@"SEL$1" ("hint.tb"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.tb"@"SEL$1" ) NONE PARTITION) FULL(@"SEL$1" "opt"."ta"@"SEL$1") FULL(@"SEL$1" "hint"."tb"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 4(end) ************** *************** Case 5 *************** SQL: select /*+ leading(t1) use_nl(hint.t1)*/ * from hint.t2, hint.t1, opt.t1 where hint.t2.a = opt.t1.c1; ============================================================ |ID|OPERATOR |NAME |EST. ROWS|COST| ------------------------------------------------------------ |0 |NESTED-LOOP JOIN CARTESIAN | |10000 |1285| |1 | TABLE SCAN |t1 |100 |78 | |2 | MATERIAL | |100 |691 | |3 | PX COORDINATOR | |100 |689 | |4 | EXCHANGE OUT DISTR |:EX10001|100 |673 | |5 | HASH JOIN | |100 |637 | |6 | EXCHANGE IN DISTR | |100 |106 | |7 | EXCHANGE OUT DISTR (PKEY)|:EX10000|100 |97 | |8 | TABLE SCAN |t2 |100 |78 | |9 | PX PARTITION ITERATOR | |500 |387 | |10| TABLE SCAN |t1 |500 |387 | ============================================================ Outputs & filters: ------------------------------------- 0 - output([t2.a], [t2.b], [t1.a], [t1.b], [t1.c1], [t1.c2]), filter(nil), conds(nil), nl_params_(nil) 1 - output([t1.a], [t1.b]), filter(nil), access([t1.a], [t1.b]), partitions(p0) 2 - output([t2.a], [t2.b], [t1.c1], [t1.c2]), filter(nil) 3 - output([t2.a], [t2.b], [t1.c1], [t1.c2]), filter(nil) 4 - output([t2.a], [t2.b], [t1.c1], [t1.c2]), filter(nil), dop=1 5 - output([t2.a], [t2.b], [t1.c1], [t1.c2]), filter(nil), equal_conds([t2.a = t1.c1]), other_conds(nil) 6 - output([t2.a], [t2.b]), filter(nil) 7 - (#keys=1, [t2.a]), output([t2.a], [t2.b]), filter(nil), is_single, dop=1 8 - output([t2.a], [t2.b]), filter(nil), access([t2.a], [t2.b]), partitions(p0) 9 - output([t1.c1], [t1.c2]), filter(nil) 10 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("hint"."t1"@"SEL$1" ("hint"."t2"@"SEL$1" "opt"."t1"@"SEL$1"))) USE_NL(@"SEL$1" ("hint"."t2"@"SEL$1" "opt"."t1"@"SEL$1")) PQ_DISTRIBUTE(@"SEL$1" ("hint"."t2"@"SEL$1" "opt"."t1"@"SEL$1") LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$1" ("hint"."t2"@"SEL$1" "opt"."t1"@"SEL$1")) FULL(@"SEL$1" "hint"."t1"@"SEL$1") USE_HASH(@"SEL$1" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t1"@"SEL$1" PARTITION NONE) FULL(@"SEL$1" "hint"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("hint.t1"@"SEL$1" ("hint.t2"@"SEL$1" "opt.t1"@"SEL$1" ))) USE_NL(@"SEL$1" ("hint.t2"@"SEL$1" "opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.t2"@"SEL$1" "opt.t1"@"SEL$1" ) LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$1" ("hint.t2"@"SEL$1" "opt.t1"@"SEL$1" )) FULL(@"SEL$1" "hint"."t1"@"SEL$1") USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) FULL(@"SEL$1" "hint"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 5(end) ************** *************** Case 6 *************** SQL: select /*+ leading(t1) use_bnl(hint.t1)*/ * from hint.t2, hint.t1, opt.t1 where hint.t2.a = opt.t1.c1; ============================================================ |ID|OPERATOR |NAME |EST. ROWS|COST| ------------------------------------------------------------ |0 |NESTED-LOOP JOIN CARTESIAN | |10000 |1285| |1 | TABLE SCAN |t1 |100 |78 | |2 | MATERIAL | |100 |691 | |3 | PX COORDINATOR | |100 |689 | |4 | EXCHANGE OUT DISTR |:EX10001|100 |673 | |5 | HASH JOIN | |100 |637 | |6 | EXCHANGE IN DISTR | |100 |106 | |7 | EXCHANGE OUT DISTR (PKEY)|:EX10000|100 |97 | |8 | TABLE SCAN |t2 |100 |78 | |9 | PX PARTITION ITERATOR | |500 |387 | |10| TABLE SCAN |t1 |500 |387 | ============================================================ Outputs & filters: ------------------------------------- 0 - output([t2.a], [t2.b], [t1.a], [t1.b], [t1.c1], [t1.c2]), filter(nil), conds(nil), nl_params_(nil) 1 - output([t1.a], [t1.b]), filter(nil), access([t1.a], [t1.b]), partitions(p0) 2 - output([t2.a], [t2.b], [t1.c1], [t1.c2]), filter(nil) 3 - output([t2.a], [t2.b], [t1.c1], [t1.c2]), filter(nil) 4 - output([t2.a], [t2.b], [t1.c1], [t1.c2]), filter(nil), dop=1 5 - output([t2.a], [t2.b], [t1.c1], [t1.c2]), filter(nil), equal_conds([t2.a = t1.c1]), other_conds(nil) 6 - output([t2.a], [t2.b]), filter(nil) 7 - (#keys=1, [t2.a]), output([t2.a], [t2.b]), filter(nil), is_single, dop=1 8 - output([t2.a], [t2.b]), filter(nil), access([t2.a], [t2.b]), partitions(p0) 9 - output([t1.c1], [t1.c2]), filter(nil) 10 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("hint"."t1"@"SEL$1" ("hint"."t2"@"SEL$1" "opt"."t1"@"SEL$1"))) USE_NL(@"SEL$1" ("hint"."t2"@"SEL$1" "opt"."t1"@"SEL$1")) PQ_DISTRIBUTE(@"SEL$1" ("hint"."t2"@"SEL$1" "opt"."t1"@"SEL$1") LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$1" ("hint"."t2"@"SEL$1" "opt"."t1"@"SEL$1")) FULL(@"SEL$1" "hint"."t1"@"SEL$1") USE_HASH(@"SEL$1" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t1"@"SEL$1" PARTITION NONE) FULL(@"SEL$1" "hint"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("hint.t1"@"SEL$1" ("hint.t2"@"SEL$1" "opt.t1"@"SEL$1" ))) USE_NL(@"SEL$1" ("hint.t2"@"SEL$1" "opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.t2"@"SEL$1" "opt.t1"@"SEL$1" ) LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$1" ("hint.t2"@"SEL$1" "opt.t1"@"SEL$1" )) FULL(@"SEL$1" "hint"."t1"@"SEL$1") USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) FULL(@"SEL$1" "hint"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 6(end) ************** *************** Case 7 *************** SQL: select /*+ leading(t2, t1) use_merge(t1)*/ * from hint.t2, opt.t1 where t1.c1 = t2.a; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |PX COORDINATOR | |100 |691 | |1 | EXCHANGE OUT DISTR |:EX10001|100 |674 | |2 | MERGE JOIN | |100 |638 | |3 | EXCHANGE IN DISTR | |100 |106 | |4 | EXCHANGE OUT DISTR (PKEY)|:EX10000|100 |97 | |5 | TABLE SCAN |t2 |100 |78 | |6 | SORT | |500 |490 | |7 | PX PARTITION ITERATOR | |500 |387 | |8 | TABLE SCAN |t1 |500 |387 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(t2.a, t2.b, t1.c1, t1.c2)]), filter(nil) 1 - output([INTERNAL_FUNCTION(t2.a, t2.b, t1.c1, t1.c2)]), filter(nil), dop=1 2 - output([t1.c1], [t2.a], [t2.b], [t1.c2]), filter(nil), equal_conds([t1.c1 = t2.a]), other_conds(nil) 3 - output([t2.a], [t2.b]), filter(nil) 4 - (#keys=1, [t2.a]), output([t2.a], [t2.b]), filter(nil), is_single, dop=1 5 - output([t2.a], [t2.b]), filter(nil), access([t2.a], [t2.b]), partitions(p0) 6 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort 7 - output([t1.c1], [t1.c2]), filter(nil) 8 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("hint"."t2"@"SEL$1" "opt"."t1"@"SEL$1")) USE_MERGE(@"SEL$1" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t1"@"SEL$1" PARTITION NONE) FULL(@"SEL$1" "hint"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("hint.t2"@"SEL$1" "opt.t1"@"SEL$1" )) USE_MERGE(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) FULL(@"SEL$1" "hint"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 7(end) ************** *************** Case 8 *************** SQL: select /*+ index(hint.t1 idx_t1_a)*/ * from opt.t1, hint.t1 where hint.t1.a = opt.t1.c1; ============================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| -------------------------------------------------------------- |0 |PX COORDINATOR | |100 |703 | |1 | EXCHANGE OUT DISTR |:EX10001 |100 |686 | |2 | HASH JOIN | |100 |651 | |3 | EXCHANGE IN DISTR | |100 |120 | |4 | EXCHANGE OUT DISTR (PKEY)|:EX10000 |100 |110 | |5 | TABLE SCAN |t1(idx_t1_a)|100 |92 | |6 | PX PARTITION ITERATOR | |500 |387 | |7 | TABLE SCAN |t1 |500 |387 | ============================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t1.a, t1.b)]), filter(nil) 1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t1.a, t1.b)]), filter(nil), dop=1 2 - output([t1.a], [t1.c1], [t1.b], [t1.c2]), filter(nil), equal_conds([t1.a = t1.c1]), other_conds(nil) 3 - output([t1.a], [t1.b]), filter(nil) 4 - (#keys=1, [t1.a]), output([t1.a], [t1.b]), filter(nil), is_single, dop=1 5 - output([t1.a], [t1.b]), filter(nil), access([t1.a], [t1.b]), partitions(p0) 6 - output([t1.c1], [t1.c2]), filter(nil) 7 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("hint"."t1"@"SEL$1" "opt"."t1"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t1"@"SEL$1" PARTITION NONE) INDEX(@"SEL$1" "hint"."t1"@"SEL$1" "idx_t1_a") FULL(@"SEL$1" "opt"."t1"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("hint.t1"@"SEL$1" "opt.t1"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) INDEX(@"SEL$1" "hint"."t1"@"SEL$1" "idx_t1_a") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 8(end) ************** *************** Case 9 *************** SQL: select /*+ full(opt.t1)*/ * from opt.t1, hint.t1 where hint.t1.a = opt.t1.c2; ===================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ----------------------------------------------------- |0 |HASH JOIN | |451 |749 | |1 | TABLE SCAN |t1 |100 |78 | |2 | PX COORDINATOR | |500 |528 | |3 | EXCHANGE OUT DISTR |:EX10000|500 |481 | |4 | PX PARTITION ITERATOR| |500 |387 | |5 | TABLE SCAN |t1 |500 |387 | ===================================================== Outputs & filters: ------------------------------------- 0 - output([t1.c1], [t1.c2], [t1.a], [t1.b]), filter(nil), equal_conds([t1.a = t1.c2]), other_conds(nil) 1 - output([t1.a], [t1.b]), filter(nil), access([t1.a], [t1.b]), partitions(p0) 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) 5 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("hint"."t1"@"SEL$1" "opt"."t1"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t1"@"SEL$1" LOCAL LOCAL) FULL(@"SEL$1" "hint"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("hint.t1"@"SEL$1" "opt.t1"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) LOCAL LOCAL) FULL(@"SEL$1" "hint"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 9(end) ************** *************** Case 10 *************** SQL: select /*+ ordered use_nl(hint.t2 opt.t1)*/ * from (select * from t2) as tb, hint.t2, opt.t1; =========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST | ----------------------------------------------------------- |0 |NESTED-LOOP JOIN CARTESIAN | |15000000 |1292839| |1 | NESTED-LOOP JOIN CARTESIAN| |50000 |3186 | |2 | TABLE SCAN |t2 |100 |78 | |3 | MATERIAL | |500 |531 | |4 | PX COORDINATOR | |500 |528 | |5 | EXCHANGE OUT DISTR |:EX10000|500 |481 | |6 | PX PARTITION ITERATOR | |500 |387 | |7 | TABLE SCAN |t1 |500 |387 | |8 | MATERIAL | |300 |471 | |9 | PX COORDINATOR | |300 |464 | |10| EXCHANGE OUT DISTR |:EX20000|300 |391 | |11| PX PARTITION ITERATOR | |300 |233 | |12| TABLE SCAN |t2 |300 |233 | =========================================================== Outputs & filters: ------------------------------------- 0 - output([t2.c1], [t2.c2], [t2.c3], [t2.a], [t2.b], [t1.c1], [t1.c2]), filter(nil), conds(nil), nl_params_(nil) 1 - output([t2.a], [t2.b], [t1.c1], [t1.c2]), filter(nil), conds(nil), nl_params_(nil) 2 - output([t2.a], [t2.b]), filter(nil), access([t2.a], [t2.b]), partitions(p0) 3 - output([t1.c1], [t1.c2]), filter(nil) 4 - output([t1.c1], [t1.c2]), filter(nil) 5 - output([t1.c1], [t1.c2]), filter(nil), dop=1 6 - output([t1.c1], [t1.c2]), filter(nil) 7 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) 8 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 9 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 10 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1 11 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 12 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$CFEA49FE" (("hint"."t2"@"SEL$1" "opt"."t1"@"SEL$1") "opt"."t2"@"SEL$2")) USE_NL(@"SEL$CFEA49FE" "opt"."t2"@"SEL$2") PQ_DISTRIBUTE(@"SEL$CFEA49FE" "opt"."t2"@"SEL$2" LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$CFEA49FE" "opt"."t2"@"SEL$2") USE_NL(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1" LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1") FULL(@"SEL$CFEA49FE" "hint"."t2"@"SEL$1") FULL(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1") FULL(@"SEL$CFEA49FE" "opt"."t2"@"SEL$2") MERGE(@"SEL$2" > "SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" (("hint.t2"@"SEL$1" "opt.t1"@"SEL$1" )"opt.t2"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t2"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t2"@"SEL$1" ) LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t2"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t1"@"SEL$1" )) FULL(@"SEL$1" "hint"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 10(end) ************** *************** Case 11 *************** SQL: select /*+ ordered use_bnl(hint.t2 opt.t1)*/ * from (select * from t2) as tb, hint.t2, opt.t1; =========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST | ----------------------------------------------------------- |0 |NESTED-LOOP JOIN CARTESIAN | |15000000 |1292839| |1 | NESTED-LOOP JOIN CARTESIAN| |50000 |3186 | |2 | TABLE SCAN |t2 |100 |78 | |3 | MATERIAL | |500 |531 | |4 | PX COORDINATOR | |500 |528 | |5 | EXCHANGE OUT DISTR |:EX10000|500 |481 | |6 | PX PARTITION ITERATOR | |500 |387 | |7 | TABLE SCAN |t1 |500 |387 | |8 | MATERIAL | |300 |471 | |9 | PX COORDINATOR | |300 |464 | |10| EXCHANGE OUT DISTR |:EX20000|300 |391 | |11| PX PARTITION ITERATOR | |300 |233 | |12| TABLE SCAN |t2 |300 |233 | =========================================================== Outputs & filters: ------------------------------------- 0 - output([t2.c1], [t2.c2], [t2.c3], [t2.a], [t2.b], [t1.c1], [t1.c2]), filter(nil), conds(nil), nl_params_(nil) 1 - output([t2.a], [t2.b], [t1.c1], [t1.c2]), filter(nil), conds(nil), nl_params_(nil) 2 - output([t2.a], [t2.b]), filter(nil), access([t2.a], [t2.b]), partitions(p0) 3 - output([t1.c1], [t1.c2]), filter(nil) 4 - output([t1.c1], [t1.c2]), filter(nil) 5 - output([t1.c1], [t1.c2]), filter(nil), dop=1 6 - output([t1.c1], [t1.c2]), filter(nil) 7 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) 8 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 9 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 10 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1 11 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 12 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$CFEA49FE" (("hint"."t2"@"SEL$1" "opt"."t1"@"SEL$1") "opt"."t2"@"SEL$2")) USE_NL(@"SEL$CFEA49FE" "opt"."t2"@"SEL$2") PQ_DISTRIBUTE(@"SEL$CFEA49FE" "opt"."t2"@"SEL$2" LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$CFEA49FE" "opt"."t2"@"SEL$2") USE_NL(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1" LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1") FULL(@"SEL$CFEA49FE" "hint"."t2"@"SEL$1") FULL(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1") FULL(@"SEL$CFEA49FE" "opt"."t2"@"SEL$2") MERGE(@"SEL$2" > "SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" (("hint.t2"@"SEL$1" "opt.t1"@"SEL$1" )"opt.t2"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t2"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t2"@"SEL$1" ) LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t2"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t1"@"SEL$1" )) FULL(@"SEL$1" "hint"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 11(end) ************** *************** Case 12 *************** SQL: select /*+ leading(tb, opt.t1) use_nl(hint.t2 opt.t1)*/ * from (select * from t2) as tb, hint.t2, opt.t1; =========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST | ----------------------------------------------------------- |0 |NESTED-LOOP JOIN CARTESIAN | |15000000 |3876364| |1 | NESTED-LOOP JOIN CARTESIAN| |150000 |8729 | |2 | PX COORDINATOR | |300 |464 | |3 | EXCHANGE OUT DISTR |:EX10000|300 |391 | |4 | PX PARTITION ITERATOR | |300 |233 | |5 | TABLE SCAN |t2 |300 |233 | |6 | MATERIAL | |500 |531 | |7 | PX COORDINATOR | |500 |528 | |8 | EXCHANGE OUT DISTR |:EX20000|500 |481 | |9 | PX PARTITION ITERATOR | |500 |387 | |10| TABLE SCAN |t1 |500 |387 | |11| MATERIAL | |100 |79 | |12| TABLE SCAN |t2 |100 |78 | =========================================================== Outputs & filters: ------------------------------------- 0 - output([t2.c1], [t2.c2], [t2.c3], [t2.a], [t2.b], [t1.c1], [t1.c2]), filter(nil), conds(nil), nl_params_(nil) 1 - output([t2.c1], [t2.c2], [t2.c3], [t1.c1], [t1.c2]), filter(nil), conds(nil), nl_params_(nil) 2 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 3 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1 4 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 5 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]) 6 - output([t1.c1], [t1.c2]), filter(nil) 7 - output([t1.c1], [t1.c2]), filter(nil) 8 - output([t1.c1], [t1.c2]), filter(nil), dop=1 9 - output([t1.c1], [t1.c2]), filter(nil) 10 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) 11 - output([t2.a], [t2.b]), filter(nil) 12 - output([t2.a], [t2.b]), filter(nil), access([t2.a], [t2.b]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$CFEA49FE" (("opt"."t2"@"SEL$2" "opt"."t1"@"SEL$1") "hint"."t2"@"SEL$1")) USE_NL(@"SEL$CFEA49FE" "hint"."t2"@"SEL$1") USE_NL_MATERIALIZATION(@"SEL$CFEA49FE" "hint"."t2"@"SEL$1") USE_NL(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1" LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1") FULL(@"SEL$CFEA49FE" "opt"."t2"@"SEL$2") FULL(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1") FULL(@"SEL$CFEA49FE" "hint"."t2"@"SEL$1") MERGE(@"SEL$2" > "SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" (("opt.t2"@"SEL$1" "opt.t1"@"SEL$1" )"hint.t2"@"SEL$1" )) USE_NL(@"SEL$1" ("hint.t2"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.t2"@"SEL$1" ) LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$1" ("hint.t2"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t1"@"SEL$1" )) FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "hint"."t2"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 12(end) ************** *************** Case 13 *************** SQL: select /*+ leading(tb, opt.t1) use_bnl(hint.t2, opt.t1)*/ * from (select * from t2) as tb, hint.t2, opt.t1; =========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST | ----------------------------------------------------------- |0 |NESTED-LOOP JOIN CARTESIAN | |15000000 |3876364| |1 | NESTED-LOOP JOIN CARTESIAN| |150000 |8729 | |2 | PX COORDINATOR | |300 |464 | |3 | EXCHANGE OUT DISTR |:EX10000|300 |391 | |4 | PX PARTITION ITERATOR | |300 |233 | |5 | TABLE SCAN |t2 |300 |233 | |6 | MATERIAL | |500 |531 | |7 | PX COORDINATOR | |500 |528 | |8 | EXCHANGE OUT DISTR |:EX20000|500 |481 | |9 | PX PARTITION ITERATOR | |500 |387 | |10| TABLE SCAN |t1 |500 |387 | |11| MATERIAL | |100 |79 | |12| TABLE SCAN |t2 |100 |78 | =========================================================== Outputs & filters: ------------------------------------- 0 - output([t2.c1], [t2.c2], [t2.c3], [t2.a], [t2.b], [t1.c1], [t1.c2]), filter(nil), conds(nil), nl_params_(nil) 1 - output([t2.c1], [t2.c2], [t2.c3], [t1.c1], [t1.c2]), filter(nil), conds(nil), nl_params_(nil) 2 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 3 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1 4 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 5 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]) 6 - output([t1.c1], [t1.c2]), filter(nil) 7 - output([t1.c1], [t1.c2]), filter(nil) 8 - output([t1.c1], [t1.c2]), filter(nil), dop=1 9 - output([t1.c1], [t1.c2]), filter(nil) 10 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) 11 - output([t2.a], [t2.b]), filter(nil) 12 - output([t2.a], [t2.b]), filter(nil), access([t2.a], [t2.b]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$CFEA49FE" (("opt"."t2"@"SEL$2" "opt"."t1"@"SEL$1") "hint"."t2"@"SEL$1")) USE_NL(@"SEL$CFEA49FE" "hint"."t2"@"SEL$1") USE_NL_MATERIALIZATION(@"SEL$CFEA49FE" "hint"."t2"@"SEL$1") USE_NL(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1" LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1") FULL(@"SEL$CFEA49FE" "opt"."t2"@"SEL$2") FULL(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1") FULL(@"SEL$CFEA49FE" "hint"."t2"@"SEL$1") MERGE(@"SEL$2" > "SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" (("opt.t2"@"SEL$1" "opt.t1"@"SEL$1" )"hint.t2"@"SEL$1" )) USE_NL(@"SEL$1" ("hint.t2"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.t2"@"SEL$1" ) LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$1" ("hint.t2"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t1"@"SEL$1" )) FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "hint"."t2"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 13(end) ************** *************** Case 14 *************** SQL: select * from opt.t1,opt.t2 use index (idx_t1_c2) where opt.t1.c1 = opt.t2.c2; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |PX COORDINATOR | |270 |1321| |1 | EXCHANGE OUT DISTR |:EX10001|270 |1234| |2 | HASH JOIN | |270 |1046| |3 | PX PARTITION ITERATOR | |500 |387 | |4 | TABLE SCAN |t1 |500 |387 | |5 | EXCHANGE IN DISTR | |300 |464 | |6 | EXCHANGE OUT DISTR (PKEY)|:EX10000|300 |391 | |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.c2], [t1.c2], [t2.c1], [t2.c3]), filter(nil), equal_conds([t1.c1 = t2.c2]), other_conds(nil) 3 - output([t1.c1], [t1.c2]), filter(nil) 4 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) 5 - output([t2.c2], [t2.c1], [t2.c3]), filter(nil) 6 - (#keys=1, [t2.c2]), output([t2.c2], [t2.c1], [t2.c3]), filter(nil), dop=1 7 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 8 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("opt"."t1"@"SEL$1" "opt"."t2"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."t2"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t2"@"SEL$1" NONE PARTITION) FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.t2"@"SEL$1" "opt.t1"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 14(end) ************** *************** Case 15 *************** SQL: select /*+ index(t1 idx_t1_c2)*/ * from opt.t1, hint.t1 where hint.t1.a = opt.t1.c2; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |HASH JOIN | |451 |749 | |1 | TABLE SCAN |t1 |100 |78 | |2 | PX COORDINATOR | |500 |528 | |3 | EXCHANGE OUT DISTR |:EX10000 |500 |481 | |4 | PX PARTITION ITERATOR| |500 |387 | |5 | TABLE SCAN |t1(idx_t1_c2)|500 |387 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([t1.c1], [t1.c2], [t1.a], [t1.b]), filter(nil), equal_conds([t1.a = t1.c2]), other_conds(nil) 1 - output([t1.a], [t1.b]), filter(nil), access([t1.a], [t1.b]), partitions(p0) 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) 5 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("hint"."t1"@"SEL$1" "opt"."t1"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t1"@"SEL$1" LOCAL LOCAL) FULL(@"SEL$1" "hint"."t1"@"SEL$1") INDEX(@"SEL$1" "opt"."t1"@"SEL$1" "idx_t1_c2") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("hint.t1"@"SEL$1" "opt.t1"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) LOCAL LOCAL) FULL(@"SEL$1" "hint"."t1"@"SEL$1") INDEX(@"SEL$1" "opt"."t1"@"SEL$1" "idx_t1_c2") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 15(end) ************** *************** Case 16 *************** SQL: select /*+ index(opt.t1 idx_t1_c2)*/ * from opt.t1, hint.t1 where hint.t1.a = opt.t1.c2; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |HASH JOIN | |451 |749 | |1 | TABLE SCAN |t1 |100 |78 | |2 | PX COORDINATOR | |500 |528 | |3 | EXCHANGE OUT DISTR |:EX10000 |500 |481 | |4 | PX PARTITION ITERATOR| |500 |387 | |5 | TABLE SCAN |t1(idx_t1_c2)|500 |387 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([t1.c1], [t1.c2], [t1.a], [t1.b]), filter(nil), equal_conds([t1.a = t1.c2]), other_conds(nil) 1 - output([t1.a], [t1.b]), filter(nil), access([t1.a], [t1.b]), partitions(p0) 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) 5 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("hint"."t1"@"SEL$1" "opt"."t1"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t1"@"SEL$1" LOCAL LOCAL) FULL(@"SEL$1" "hint"."t1"@"SEL$1") INDEX(@"SEL$1" "opt"."t1"@"SEL$1" "idx_t1_c2") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("hint.t1"@"SEL$1" "opt.t1"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) LOCAL LOCAL) FULL(@"SEL$1" "hint"."t1"@"SEL$1") INDEX(@"SEL$1" "opt"."t1"@"SEL$1" "idx_t1_c2") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 16(end) ************** *************** Case 17 *************** SQL: select /*+ index(opt.t1 idx_t1_c2) use_merge(hint.t2, hint.t1)*/ * from opt.t1, hint.t1 where hint.t1.a = opt.t1.c2; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |HASH JOIN | |451 |749 | |1 | TABLE SCAN |t1 |100 |78 | |2 | PX COORDINATOR | |500 |528 | |3 | EXCHANGE OUT DISTR |:EX10000 |500 |481 | |4 | PX PARTITION ITERATOR| |500 |387 | |5 | TABLE SCAN |t1(idx_t1_c2)|500 |387 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([t1.c1], [t1.c2], [t1.a], [t1.b]), filter(nil), equal_conds([t1.a = t1.c2]), other_conds(nil) 1 - output([t1.a], [t1.b]), filter(nil), access([t1.a], [t1.b]), partitions(p0) 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) 5 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("hint"."t1"@"SEL$1" "opt"."t1"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t1"@"SEL$1" LOCAL LOCAL) FULL(@"SEL$1" "hint"."t1"@"SEL$1") INDEX(@"SEL$1" "opt"."t1"@"SEL$1" "idx_t1_c2") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("hint.t1"@"SEL$1" "opt.t1"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) LOCAL LOCAL) FULL(@"SEL$1" "hint"."t1"@"SEL$1") INDEX(@"SEL$1" "opt"."t1"@"SEL$1" "idx_t1_c2") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 17(end) ************** *************** Case 18 *************** SQL: select /*+ index(opt.t1 idx_t1_c2) use_merge(test hint.t2) use_nl(hint.t1)*/ * from opt.t1, hint.t1 where hint.t1.a = opt.t1.c2; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |HASH JOIN | |451 |749 | |1 | TABLE SCAN |t1 |100 |78 | |2 | PX COORDINATOR | |500 |528 | |3 | EXCHANGE OUT DISTR |:EX10000 |500 |481 | |4 | PX PARTITION ITERATOR| |500 |387 | |5 | TABLE SCAN |t1(idx_t1_c2)|500 |387 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([t1.c1], [t1.c2], [t1.a], [t1.b]), filter(nil), equal_conds([t1.a = t1.c2]), other_conds(nil) 1 - output([t1.a], [t1.b]), filter(nil), access([t1.a], [t1.b]), partitions(p0) 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) 5 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("hint"."t1"@"SEL$1" "opt"."t1"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t1"@"SEL$1" LOCAL LOCAL) FULL(@"SEL$1" "hint"."t1"@"SEL$1") INDEX(@"SEL$1" "opt"."t1"@"SEL$1" "idx_t1_c2") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("hint.t1"@"SEL$1" "opt.t1"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) LOCAL LOCAL) FULL(@"SEL$1" "hint"."t1"@"SEL$1") INDEX(@"SEL$1" "opt"."t1"@"SEL$1" "idx_t1_c2") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 18(end) ************** *************** Case 19 *************** SQL: select /*+ index(ta idx_t1_c2) use_merge(test) use_nl(tb)*/ * from opt.t1 as ta, hint.t1 as tb where ta.c1 = tb.a; =============================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| --------------------------------------------------------------- |0 |PX COORDINATOR | |100 |689 | |1 | EXCHANGE OUT DISTR |:EX10001 |100 |673 | |2 | HASH JOIN | |100 |637 | |3 | EXCHANGE IN DISTR | |100 |106 | |4 | EXCHANGE OUT DISTR (PKEY)|:EX10000 |100 |97 | |5 | TABLE SCAN |tb |100 |78 | |6 | PX PARTITION ITERATOR | |500 |387 | |7 | TABLE SCAN |ta(idx_t1_c2)|500 |387 | =============================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(ta.c1, ta.c2, tb.a, tb.b)]), filter(nil) 1 - output([INTERNAL_FUNCTION(ta.c1, ta.c2, tb.a, tb.b)]), filter(nil), dop=1 2 - output([ta.c1], [tb.a], [tb.b], [ta.c2]), filter(nil), equal_conds([ta.c1 = tb.a]), other_conds(nil) 3 - output([tb.a], [tb.b]), filter(nil) 4 - (#keys=1, [tb.a]), output([tb.a], [tb.b]), filter(nil), is_single, dop=1 5 - output([tb.a], [tb.b]), filter(nil), access([tb.a], [tb.b]), partitions(p0) 6 - output([ta.c1], [ta.c2]), filter(nil) 7 - output([ta.c1], [ta.c2]), filter(nil), access([ta.c1], [ta.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("hint"."tb"@"SEL$1" "opt"."ta"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."ta"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."ta"@"SEL$1" PARTITION NONE) FULL(@"SEL$1" "hint"."tb"@"SEL$1") INDEX(@"SEL$1" "opt"."ta"@"SEL$1" "idx_t1_c2") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("hint.tb"@"SEL$1" "opt.ta"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.ta"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.ta"@"SEL$1" ) PARTITION NONE) FULL(@"SEL$1" "hint"."tb"@"SEL$1") INDEX(@"SEL$1" "opt"."ta"@"SEL$1" "idx_t1_c2") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 19(end) ************** *************** Case 20 *************** SQL: select /*+ index(ta idx_t1_c2) use_merge(test) use_bnl(tb)*/ * from opt.t1 as ta, hint.t1 as tb where ta.c1 = tb.a; =============================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| --------------------------------------------------------------- |0 |PX COORDINATOR | |100 |689 | |1 | EXCHANGE OUT DISTR |:EX10001 |100 |673 | |2 | HASH JOIN | |100 |637 | |3 | EXCHANGE IN DISTR | |100 |106 | |4 | EXCHANGE OUT DISTR (PKEY)|:EX10000 |100 |97 | |5 | TABLE SCAN |tb |100 |78 | |6 | PX PARTITION ITERATOR | |500 |387 | |7 | TABLE SCAN |ta(idx_t1_c2)|500 |387 | =============================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(ta.c1, ta.c2, tb.a, tb.b)]), filter(nil) 1 - output([INTERNAL_FUNCTION(ta.c1, ta.c2, tb.a, tb.b)]), filter(nil), dop=1 2 - output([ta.c1], [tb.a], [tb.b], [ta.c2]), filter(nil), equal_conds([ta.c1 = tb.a]), other_conds(nil) 3 - output([tb.a], [tb.b]), filter(nil) 4 - (#keys=1, [tb.a]), output([tb.a], [tb.b]), filter(nil), is_single, dop=1 5 - output([tb.a], [tb.b]), filter(nil), access([tb.a], [tb.b]), partitions(p0) 6 - output([ta.c1], [ta.c2]), filter(nil) 7 - output([ta.c1], [ta.c2]), filter(nil), access([ta.c1], [ta.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("hint"."tb"@"SEL$1" "opt"."ta"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."ta"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."ta"@"SEL$1" PARTITION NONE) FULL(@"SEL$1" "hint"."tb"@"SEL$1") INDEX(@"SEL$1" "opt"."ta"@"SEL$1" "idx_t1_c2") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("hint.tb"@"SEL$1" "opt.ta"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.ta"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.ta"@"SEL$1" ) PARTITION NONE) FULL(@"SEL$1" "hint"."tb"@"SEL$1") INDEX(@"SEL$1" "opt"."ta"@"SEL$1" "idx_t1_c2") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 20(end) ************** *************** Case 21 *************** SQL: select /*+ index(opt.t1 idx_t1_c2) use_merge(opt.t2) use_nl(tb)*/ * from opt.t1 as ta, hint.t1 as tb where ta.c1 = tb.a; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |PX COORDINATOR | |100 |689 | |1 | EXCHANGE OUT DISTR |:EX10001|100 |673 | |2 | HASH JOIN | |100 |637 | |3 | EXCHANGE IN DISTR | |100 |106 | |4 | EXCHANGE OUT DISTR (PKEY)|:EX10000|100 |97 | |5 | TABLE SCAN |tb |100 |78 | |6 | PX PARTITION ITERATOR | |500 |387 | |7 | TABLE SCAN |ta |500 |387 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(ta.c1, ta.c2, tb.a, tb.b)]), filter(nil) 1 - output([INTERNAL_FUNCTION(ta.c1, ta.c2, tb.a, tb.b)]), filter(nil), dop=1 2 - output([ta.c1], [tb.a], [tb.b], [ta.c2]), filter(nil), equal_conds([ta.c1 = tb.a]), other_conds(nil) 3 - output([tb.a], [tb.b]), filter(nil) 4 - (#keys=1, [tb.a]), output([tb.a], [tb.b]), filter(nil), is_single, dop=1 5 - output([tb.a], [tb.b]), filter(nil), access([tb.a], [tb.b]), partitions(p0) 6 - output([ta.c1], [ta.c2]), filter(nil) 7 - output([ta.c1], [ta.c2]), filter(nil), access([ta.c1], [ta.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("hint"."tb"@"SEL$1" "opt"."ta"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."ta"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."ta"@"SEL$1" PARTITION NONE) FULL(@"SEL$1" "hint"."tb"@"SEL$1") FULL(@"SEL$1" "opt"."ta"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("hint.tb"@"SEL$1" "opt.ta"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.ta"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.ta"@"SEL$1" ) PARTITION NONE) FULL(@"SEL$1" "hint"."tb"@"SEL$1") FULL(@"SEL$1" "opt"."ta"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 21(end) ************** *************** Case 22 *************** SQL: select /*+ index(opt.t1 idx_t1_c2) use_merge(opt.t2) use_bnl(tb)*/ * from opt.t1 as ta, hint.t1 as tb where ta.c1 = tb.a; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |PX COORDINATOR | |100 |689 | |1 | EXCHANGE OUT DISTR |:EX10001|100 |673 | |2 | HASH JOIN | |100 |637 | |3 | EXCHANGE IN DISTR | |100 |106 | |4 | EXCHANGE OUT DISTR (PKEY)|:EX10000|100 |97 | |5 | TABLE SCAN |tb |100 |78 | |6 | PX PARTITION ITERATOR | |500 |387 | |7 | TABLE SCAN |ta |500 |387 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(ta.c1, ta.c2, tb.a, tb.b)]), filter(nil) 1 - output([INTERNAL_FUNCTION(ta.c1, ta.c2, tb.a, tb.b)]), filter(nil), dop=1 2 - output([ta.c1], [tb.a], [tb.b], [ta.c2]), filter(nil), equal_conds([ta.c1 = tb.a]), other_conds(nil) 3 - output([tb.a], [tb.b]), filter(nil) 4 - (#keys=1, [tb.a]), output([tb.a], [tb.b]), filter(nil), is_single, dop=1 5 - output([tb.a], [tb.b]), filter(nil), access([tb.a], [tb.b]), partitions(p0) 6 - output([ta.c1], [ta.c2]), filter(nil) 7 - output([ta.c1], [ta.c2]), filter(nil), access([ta.c1], [ta.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("hint"."tb"@"SEL$1" "opt"."ta"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."ta"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."ta"@"SEL$1" PARTITION NONE) FULL(@"SEL$1" "hint"."tb"@"SEL$1") FULL(@"SEL$1" "opt"."ta"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("hint.tb"@"SEL$1" "opt.ta"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.ta"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.ta"@"SEL$1" ) PARTITION NONE) FULL(@"SEL$1" "hint"."tb"@"SEL$1") FULL(@"SEL$1" "opt"."ta"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 22(end) ************** *************** Case 23 *************** SQL: select /*+ index(opt.t1 idx_test) use_merge(opt.t2) use_nl(tb)*/ * from opt.t1 as ta, hint.t1 as tb where ta.c1 = tb.a; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |PX COORDINATOR | |100 |689 | |1 | EXCHANGE OUT DISTR |:EX10001|100 |673 | |2 | HASH JOIN | |100 |637 | |3 | EXCHANGE IN DISTR | |100 |106 | |4 | EXCHANGE OUT DISTR (PKEY)|:EX10000|100 |97 | |5 | TABLE SCAN |tb |100 |78 | |6 | PX PARTITION ITERATOR | |500 |387 | |7 | TABLE SCAN |ta |500 |387 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(ta.c1, ta.c2, tb.a, tb.b)]), filter(nil) 1 - output([INTERNAL_FUNCTION(ta.c1, ta.c2, tb.a, tb.b)]), filter(nil), dop=1 2 - output([ta.c1], [tb.a], [tb.b], [ta.c2]), filter(nil), equal_conds([ta.c1 = tb.a]), other_conds(nil) 3 - output([tb.a], [tb.b]), filter(nil) 4 - (#keys=1, [tb.a]), output([tb.a], [tb.b]), filter(nil), is_single, dop=1 5 - output([tb.a], [tb.b]), filter(nil), access([tb.a], [tb.b]), partitions(p0) 6 - output([ta.c1], [ta.c2]), filter(nil) 7 - output([ta.c1], [ta.c2]), filter(nil), access([ta.c1], [ta.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("hint"."tb"@"SEL$1" "opt"."ta"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."ta"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."ta"@"SEL$1" PARTITION NONE) FULL(@"SEL$1" "hint"."tb"@"SEL$1") FULL(@"SEL$1" "opt"."ta"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("hint.tb"@"SEL$1" "opt.ta"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.ta"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.ta"@"SEL$1" ) PARTITION NONE) FULL(@"SEL$1" "hint"."tb"@"SEL$1") FULL(@"SEL$1" "opt"."ta"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 23(end) ************** *************** Case 24 *************** SQL: select /*+ index(opt.t1 idx_test) use_merge(opt.t2) use_bnl(tb)*/ * from opt.t1 as ta, hint.t1 as tb where ta.c1 = tb.a; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |PX COORDINATOR | |100 |689 | |1 | EXCHANGE OUT DISTR |:EX10001|100 |673 | |2 | HASH JOIN | |100 |637 | |3 | EXCHANGE IN DISTR | |100 |106 | |4 | EXCHANGE OUT DISTR (PKEY)|:EX10000|100 |97 | |5 | TABLE SCAN |tb |100 |78 | |6 | PX PARTITION ITERATOR | |500 |387 | |7 | TABLE SCAN |ta |500 |387 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(ta.c1, ta.c2, tb.a, tb.b)]), filter(nil) 1 - output([INTERNAL_FUNCTION(ta.c1, ta.c2, tb.a, tb.b)]), filter(nil), dop=1 2 - output([ta.c1], [tb.a], [tb.b], [ta.c2]), filter(nil), equal_conds([ta.c1 = tb.a]), other_conds(nil) 3 - output([tb.a], [tb.b]), filter(nil) 4 - (#keys=1, [tb.a]), output([tb.a], [tb.b]), filter(nil), is_single, dop=1 5 - output([tb.a], [tb.b]), filter(nil), access([tb.a], [tb.b]), partitions(p0) 6 - output([ta.c1], [ta.c2]), filter(nil) 7 - output([ta.c1], [ta.c2]), filter(nil), access([ta.c1], [ta.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("hint"."tb"@"SEL$1" "opt"."ta"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."ta"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."ta"@"SEL$1" PARTITION NONE) FULL(@"SEL$1" "hint"."tb"@"SEL$1") FULL(@"SEL$1" "opt"."ta"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("hint.tb"@"SEL$1" "opt.ta"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.ta"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.ta"@"SEL$1" ) PARTITION NONE) FULL(@"SEL$1" "hint"."tb"@"SEL$1") FULL(@"SEL$1" "opt"."ta"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 24(end) ************** *************** Case 25 *************** SQL: select /*+ index(opt.t1 idx_test) use_merge(ta tb) use_nl(tb)*/ * from opt.t1 as ta, hint.t1 as tb where ta.c1 = tb.a; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |PX COORDINATOR | |100 |688 | |1 | EXCHANGE OUT DISTR |:EX10001|100 |671 | |2 | MERGE JOIN | |100 |635 | |3 | SORT | |500 |490 | |4 | PX PARTITION ITERATOR | |500 |387 | |5 | TABLE SCAN |ta |500 |387 | |6 | EXCHANGE IN DISTR | |100 |106 | |7 | EXCHANGE OUT DISTR (PKEY)|:EX10000|100 |97 | |8 | TABLE SCAN |tb |100 |78 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(ta.c1, ta.c2, tb.a, tb.b)]), filter(nil) 1 - output([INTERNAL_FUNCTION(ta.c1, ta.c2, tb.a, tb.b)]), filter(nil), dop=1 2 - output([ta.c1], [tb.a], [ta.c2], [tb.b]), filter(nil), equal_conds([ta.c1 = tb.a]), other_conds(nil) 3 - output([ta.c1], [ta.c2]), filter(nil), sort_keys([ta.c1, ASC]), local merge sort 4 - output([ta.c1], [ta.c2]), filter(nil) 5 - output([ta.c1], [ta.c2]), filter(nil), access([ta.c1], [ta.c2]), partitions(p[0-4]) 6 - output([tb.a], [tb.b]), filter(nil) 7 - (#keys=1, [tb.a]), output([tb.a], [tb.b]), filter(nil), is_single, dop=1 8 - output([tb.a], [tb.b]), filter(nil), access([tb.a], [tb.b]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("opt"."ta"@"SEL$1" "hint"."tb"@"SEL$1")) USE_MERGE(@"SEL$1" "hint"."tb"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "hint"."tb"@"SEL$1" NONE PARTITION) FULL(@"SEL$1" "opt"."ta"@"SEL$1") FULL(@"SEL$1" "hint"."tb"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.ta"@"SEL$1" "hint.tb"@"SEL$1" )) USE_MERGE(@"SEL$1" ("hint.tb"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.tb"@"SEL$1" ) NONE PARTITION) FULL(@"SEL$1" "opt"."ta"@"SEL$1") FULL(@"SEL$1" "hint"."tb"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 25(end) ************** *************** Case 26 *************** SQL: select /*+ index(opt.t1 idx_test) use_merge(ta tb) use_bnl(tb)*/ * from opt.t1 as ta, hint.t1 as tb where ta.c1 = tb.a; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |PX COORDINATOR | |100 |688 | |1 | EXCHANGE OUT DISTR |:EX10001|100 |671 | |2 | MERGE JOIN | |100 |635 | |3 | SORT | |500 |490 | |4 | PX PARTITION ITERATOR | |500 |387 | |5 | TABLE SCAN |ta |500 |387 | |6 | EXCHANGE IN DISTR | |100 |106 | |7 | EXCHANGE OUT DISTR (PKEY)|:EX10000|100 |97 | |8 | TABLE SCAN |tb |100 |78 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(ta.c1, ta.c2, tb.a, tb.b)]), filter(nil) 1 - output([INTERNAL_FUNCTION(ta.c1, ta.c2, tb.a, tb.b)]), filter(nil), dop=1 2 - output([ta.c1], [tb.a], [ta.c2], [tb.b]), filter(nil), equal_conds([ta.c1 = tb.a]), other_conds(nil) 3 - output([ta.c1], [ta.c2]), filter(nil), sort_keys([ta.c1, ASC]), local merge sort 4 - output([ta.c1], [ta.c2]), filter(nil) 5 - output([ta.c1], [ta.c2]), filter(nil), access([ta.c1], [ta.c2]), partitions(p[0-4]) 6 - output([tb.a], [tb.b]), filter(nil) 7 - (#keys=1, [tb.a]), output([tb.a], [tb.b]), filter(nil), is_single, dop=1 8 - output([tb.a], [tb.b]), filter(nil), access([tb.a], [tb.b]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("opt"."ta"@"SEL$1" "hint"."tb"@"SEL$1")) USE_MERGE(@"SEL$1" "hint"."tb"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "hint"."tb"@"SEL$1" NONE PARTITION) FULL(@"SEL$1" "opt"."ta"@"SEL$1") FULL(@"SEL$1" "hint"."tb"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.ta"@"SEL$1" "hint.tb"@"SEL$1" )) USE_MERGE(@"SEL$1" ("hint.tb"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.tb"@"SEL$1" ) NONE PARTITION) FULL(@"SEL$1" "opt"."ta"@"SEL$1") FULL(@"SEL$1" "hint"."tb"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 26(end) ************** *************** Case 27 *************** SQL: select * from opt.t1,hint.t1 use index (idx_t1_c2, idx_t1_a) where opt.t1.c1 = hint.t1.a; ============================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| -------------------------------------------------------------- |0 |PX COORDINATOR | |100 |703 | |1 | EXCHANGE OUT DISTR |:EX10001 |100 |686 | |2 | HASH JOIN | |100 |651 | |3 | EXCHANGE IN DISTR | |100 |120 | |4 | EXCHANGE OUT DISTR (PKEY)|:EX10000 |100 |110 | |5 | TABLE SCAN |t1(idx_t1_a)|100 |92 | |6 | PX PARTITION ITERATOR | |500 |387 | |7 | TABLE SCAN |t1 |500 |387 | ============================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t1.a, t1.b)]), filter(nil) 1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t1.a, t1.b)]), filter(nil), dop=1 2 - output([t1.c1], [t1.a], [t1.b], [t1.c2]), filter(nil), equal_conds([t1.c1 = t1.a]), other_conds(nil) 3 - output([t1.a], [t1.b]), filter(nil) 4 - (#keys=1, [t1.a]), output([t1.a], [t1.b]), filter(nil), is_single, dop=1 5 - output([t1.a], [t1.b]), filter(nil), access([t1.a], [t1.b]), partitions(p0) 6 - output([t1.c1], [t1.c2]), filter(nil) 7 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("hint"."t1"@"SEL$1" "opt"."t1"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t1"@"SEL$1" PARTITION NONE) INDEX(@"SEL$1" "hint"."t1"@"SEL$1" "idx_t1_a") FULL(@"SEL$1" "opt"."t1"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("hint.t1"@"SEL$1" "opt.t1"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) INDEX(@"SEL$1" "hint"."t1"@"SEL$1" "idx_t1_a") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 27(end) ************** *************** Case 28 *************** SQL: select * from opt.t1,hint.t1 use index (idx_t1_a, idx_t1_c2) where opt.t1.c1 = hint.t1.a; ============================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| -------------------------------------------------------------- |0 |PX COORDINATOR | |100 |703 | |1 | EXCHANGE OUT DISTR |:EX10001 |100 |686 | |2 | HASH JOIN | |100 |651 | |3 | EXCHANGE IN DISTR | |100 |120 | |4 | EXCHANGE OUT DISTR (PKEY)|:EX10000 |100 |110 | |5 | TABLE SCAN |t1(idx_t1_a)|100 |92 | |6 | PX PARTITION ITERATOR | |500 |387 | |7 | TABLE SCAN |t1 |500 |387 | ============================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t1.a, t1.b)]), filter(nil) 1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t1.a, t1.b)]), filter(nil), dop=1 2 - output([t1.c1], [t1.a], [t1.b], [t1.c2]), filter(nil), equal_conds([t1.c1 = t1.a]), other_conds(nil) 3 - output([t1.a], [t1.b]), filter(nil) 4 - (#keys=1, [t1.a]), output([t1.a], [t1.b]), filter(nil), is_single, dop=1 5 - output([t1.a], [t1.b]), filter(nil), access([t1.a], [t1.b]), partitions(p0) 6 - output([t1.c1], [t1.c2]), filter(nil) 7 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("hint"."t1"@"SEL$1" "opt"."t1"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t1"@"SEL$1" PARTITION NONE) INDEX(@"SEL$1" "hint"."t1"@"SEL$1" "idx_t1_a") FULL(@"SEL$1" "opt"."t1"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("hint.t1"@"SEL$1" "opt.t1"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) INDEX(@"SEL$1" "hint"."t1"@"SEL$1" "idx_t1_a") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 28(end) ************** *************** Case 29 *************** SQL: select * from opt.t1,hint.t1 force index (idx_t1_a, idx_t1_c2) where opt.t1.c1 = hint.t1.a; ============================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| -------------------------------------------------------------- |0 |PX COORDINATOR | |100 |703 | |1 | EXCHANGE OUT DISTR |:EX10001 |100 |686 | |2 | HASH JOIN | |100 |651 | |3 | EXCHANGE IN DISTR | |100 |120 | |4 | EXCHANGE OUT DISTR (PKEY)|:EX10000 |100 |110 | |5 | TABLE SCAN |t1(idx_t1_a)|100 |92 | |6 | PX PARTITION ITERATOR | |500 |387 | |7 | TABLE SCAN |t1 |500 |387 | ============================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t1.a, t1.b)]), filter(nil) 1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t1.a, t1.b)]), filter(nil), dop=1 2 - output([t1.c1], [t1.a], [t1.b], [t1.c2]), filter(nil), equal_conds([t1.c1 = t1.a]), other_conds(nil) 3 - output([t1.a], [t1.b]), filter(nil) 4 - (#keys=1, [t1.a]), output([t1.a], [t1.b]), filter(nil), is_single, dop=1 5 - output([t1.a], [t1.b]), filter(nil), access([t1.a], [t1.b]), partitions(p0) 6 - output([t1.c1], [t1.c2]), filter(nil) 7 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("hint"."t1"@"SEL$1" "opt"."t1"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t1"@"SEL$1" PARTITION NONE) INDEX(@"SEL$1" "hint"."t1"@"SEL$1" "idx_t1_a") FULL(@"SEL$1" "opt"."t1"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("hint.t1"@"SEL$1" "opt.t1"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) INDEX(@"SEL$1" "hint"."t1"@"SEL$1" "idx_t1_a") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 29(end) ************** *************** Case 30 *************** SQL: select * from opt.t4 force index (idx_t4_c2,idx_t4_c3,idx_t4_c2_c3) where opt.t4.c1 = opt.t4.c2; =============================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ----------------------------------------------- |0 |TABLE SCAN|t4(idx_t4_c2_c3)|9 |80 | =============================================== Outputs & filters: ------------------------------------- 0 - output([t4.c1], [t4.c2], [t4.c3]), filter([t4.c1 = t4.c2]), access([t4.c1], [t4.c2], [t4.c3]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD INDEX(@"SEL$1" "opt"."t4"@"SEL$1" "idx_t4_c2_c3") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= INDEX(@"SEL$1" "opt"."t4"@"SEL$1" "idx_t4_c3") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 30(end) ************** *************** Case 31 *************** SQL: select * from opt.t4 ignore index (idx_t4_c2,idx_t4_c3,idx_t4_c2_c3) where opt.t4.c1 = opt.t4.c2; =================================== |ID|OPERATOR |NAME|EST. ROWS|COST| ----------------------------------- |0 |TABLE SCAN|t4 |9 |80 | =================================== Outputs & filters: ------------------------------------- 0 - output([t4.c1], [t4.c2], [t4.c3]), filter([t4.c1 = t4.c2]), access([t4.c1], [t4.c2], [t4.c3]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA FULL(@"SEL$1" "opt"."t4"@"SEL$1") <<<<<<< HEAD OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 31(end) ************** *************** Case 32 *************** SQL: select * from opt.t4 ignore index (idx_t4_c2,idx_t4_c3) where opt.t4.c1 = opt.t4.c2; =================================== |ID|OPERATOR |NAME|EST. ROWS|COST| ----------------------------------- |0 |TABLE SCAN|t4 |9 |80 | =================================== Outputs & filters: ------------------------------------- 0 - output([t4.c1], [t4.c2], [t4.c3]), filter([t4.c1 = t4.c2]), access([t4.c1], [t4.c2], [t4.c3]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD FULL(@"SEL$1" "opt"."t4"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= INDEX(@"SEL$1" "opt"."t4"@"SEL$1" "idx_t4_c2_c3") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 32(end) ************** *************** Case 33 *************** SQL: select * from opt.t4, hint.t1 ignore index (idx_t4_c2,idx_t4_c3, idx_t1_a) where opt.t4.c1 = hint.t1.a; ==================================== |ID|OPERATOR |NAME|EST. ROWS|COST| ------------------------------------ |0 |MERGE JOIN | |91 |181 | |1 | TABLE SCAN|t4 |100 |78 | |2 | TABLE SCAN|t1 |100 |78 | ==================================== Outputs & filters: ------------------------------------- 0 - output([t4.c1], [t4.c2], [t4.c3], [t1.a], [t1.b]), filter(nil), equal_conds([t4.c1 = t1.a]), other_conds(nil) 1 - output([t4.c1], [t4.c2], [t4.c3]), filter(nil), access([t4.c1], [t4.c2], [t4.c3]), partitions(p0) 2 - output([t1.a], [t1.b]), filter(nil), access([t1.a], [t1.b]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("opt"."t4"@"SEL$1" "hint"."t1"@"SEL$1")) USE_MERGE(@"SEL$1" "hint"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t4"@"SEL$1") FULL(@"SEL$1" "hint"."t1"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.t4"@"SEL$1" "hint.t1"@"SEL$1" )) USE_MERGE(@"SEL$1" ("hint.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.t1"@"SEL$1" ) LOCAL LOCAL) FULL(@"SEL$1" "opt"."t4"@"SEL$1") FULL(@"SEL$1" "hint"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 33(end) ************** *************** Case 34 *************** SQL: select * from opt.t4 as ta, hint.t1 as tb ignore index (idx_t4_c2,idx_t4_c3, idx_t1_a) where ta.c1 = tb.a; ==================================== |ID|OPERATOR |NAME|EST. ROWS|COST| ------------------------------------ |0 |MERGE JOIN | |91 |181 | |1 | TABLE SCAN|ta |100 |78 | |2 | TABLE SCAN|tb |100 |78 | ==================================== Outputs & filters: ------------------------------------- 0 - output([ta.c1], [ta.c2], [ta.c3], [tb.a], [tb.b]), filter(nil), equal_conds([ta.c1 = tb.a]), other_conds(nil) 1 - output([ta.c1], [ta.c2], [ta.c3]), filter(nil), access([ta.c1], [ta.c2], [ta.c3]), partitions(p0) 2 - output([tb.a], [tb.b]), filter(nil), access([tb.a], [tb.b]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("opt"."ta"@"SEL$1" "hint"."tb"@"SEL$1")) USE_MERGE(@"SEL$1" "hint"."tb"@"SEL$1") FULL(@"SEL$1" "opt"."ta"@"SEL$1") FULL(@"SEL$1" "hint"."tb"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.ta"@"SEL$1" "hint.tb"@"SEL$1" )) USE_MERGE(@"SEL$1" ("hint.tb"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.tb"@"SEL$1" ) LOCAL LOCAL) FULL(@"SEL$1" "opt"."ta"@"SEL$1") FULL(@"SEL$1" "hint"."tb"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 34(end) ************** *************** Case 35 *************** SQL: select * from opt.t1 use index(idx_yeti, idx_t1_c2) where opt.t1.c1 = opt.t1.c1; ========================================================= |ID|OPERATOR |NAME |EST. ROWS|COST| --------------------------------------------------------- |0 |PX COORDINATOR | |500 |540 | |1 | EXCHANGE OUT DISTR |:EX10000 |500 |494 | |2 | PX PARTITION ITERATOR| |500 |400 | |3 | TABLE SCAN |t1(idx_t1_c2)|500 |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) 3 - output([t1.c1], [t1.c2]), filter([t1.c1 = t1.c1]), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "opt"."t1"@"SEL$1" "idx_t1_c2") <<<<<<< HEAD OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 35(end) ************** *************** Case 36 *************** SQL: select * from opt.t4 as ta, hint.t1 as tb ignore index (idx_test, idx_t1_a) where ta.c1 = tb.a; ==================================== |ID|OPERATOR |NAME|EST. ROWS|COST| ------------------------------------ |0 |MERGE JOIN | |91 |181 | |1 | TABLE SCAN|ta |100 |78 | |2 | TABLE SCAN|tb |100 |78 | ==================================== Outputs & filters: ------------------------------------- 0 - output([ta.c1], [ta.c2], [ta.c3], [tb.a], [tb.b]), filter(nil), equal_conds([ta.c1 = tb.a]), other_conds(nil) 1 - output([ta.c1], [ta.c2], [ta.c3]), filter(nil), access([ta.c1], [ta.c2], [ta.c3]), partitions(p0) 2 - output([tb.a], [tb.b]), filter(nil), access([tb.a], [tb.b]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("opt"."ta"@"SEL$1" "hint"."tb"@"SEL$1")) USE_MERGE(@"SEL$1" "hint"."tb"@"SEL$1") FULL(@"SEL$1" "opt"."ta"@"SEL$1") FULL(@"SEL$1" "hint"."tb"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.ta"@"SEL$1" "hint.tb"@"SEL$1" )) USE_MERGE(@"SEL$1" ("hint.tb"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.tb"@"SEL$1" ) LOCAL LOCAL) FULL(@"SEL$1" "opt"."ta"@"SEL$1") FULL(@"SEL$1" "hint"."tb"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 36(end) ************** *************** Case 37 *************** SQL: select * from opt.t1 use index(index_t1_c2) where opt.t1.c2 = (select hint.t1.a from hint.t1,opt.t2 use index(idx_t1_a) where opt.t2.c1 = hint.t1.b); ================================================================ |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------------- |0 |SUBPLAN FILTER | |5 |699 | |1 | PX COORDINATOR | |5 |229 | |2 | EXCHANGE OUT DISTR |:EX10000 |5 |228 | |3 | PX PARTITION ITERATOR | |5 |227 | |4 | TABLE SCAN |t1(idx_t1_c2)|5 |227 | |5 | PX COORDINATOR | |90 |471 | |6 | EXCHANGE OUT DISTR |:EX20001 |90 |459 | |7 | HASH JOIN | |90 |434 | |8 | EXCHANGE IN DISTR | |100 |106 | |9 | EXCHANGE OUT DISTR (PKEY)|:EX20000 |100 |97 | |10| TABLE SCAN |t1 |100 |78 | |11| PX PARTITION ITERATOR | |300 |233 | |12| TABLE SCAN |t2 |300 |233 | ================================================================ Outputs & filters: ------------------------------------- 0 - output([t1.c1], [t1.c2]), filter(nil), exec_params_(nil), onetime_exprs_([subquery(1)]), init_plan_idxs_(nil) 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) 4 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) 5 - output([t1.a]), filter(nil) 6 - output([t1.a]), filter(nil), dop=1 7 - output([t1.a]), filter(nil), equal_conds([t2.c1 = t1.b]), other_conds(nil) 8 - output([t1.a], [t1.b]), filter(nil) 9 - (#keys=1, [t1.b]), output([t1.a], [t1.b]), filter(nil), is_single, dop=1 10 - output([t1.a], [t1.b]), filter(nil), access([t1.a], [t1.b]), partitions(p0) 11 - output([t2.c1]), filter(nil) 12 - output([t2.c1]), filter(nil), access([t2.c1]), partitions(p[0-2]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "opt"."t1"@"SEL$1" "idx_t1_c2") <<<<<<< HEAD LEADING(@"SEL$2" ("hint"."t1"@"SEL$2" "opt"."t2"@"SEL$2")) USE_HASH(@"SEL$2" "opt"."t2"@"SEL$2") PQ_DISTRIBUTE(@"SEL$2" "opt"."t2"@"SEL$2" PARTITION NONE) FULL(@"SEL$2" "hint"."t1"@"SEL$2") FULL(@"SEL$2" "opt"."t2"@"SEL$2") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$2" ("hint.t1"@"SEL$2" "opt.t2"@"SEL$2" )) USE_HASH(@"SEL$2" ("opt.t2"@"SEL$2" )) PQ_DISTRIBUTE(@"SEL$2" ("opt.t2"@"SEL$2" ) PARTITION NONE) FULL(@"SEL$2" "hint"."t1"@"SEL$2") FULL(@"SEL$2" "opt"."t2"@"SEL$2") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 37(end) ************** *************** Case 38 *************** SQL: select /*+ idex(yeti idx_t1_c2)*/ * from (select /*+ idex(opt.t4 idx_t4_c2))*/ * from hint.t1, opt.t4 where hint.t1.a = opt.t4.c2) as yeti, opt.t1 where yeti.a = opt.t1.c2; ============================================================= |ID|OPERATOR |NAME |EST. ROWS|COST| ------------------------------------------------------------- |0 |HASH JOIN | |365 |850 | |1 | MERGE JOIN | |91 |181 | |2 | TABLE SCAN |t4(idx_t4_c2_c3)|100 |78 | |3 | TABLE SCAN |t1 |100 |78 | |4 | PX COORDINATOR | |500 |528 | |5 | EXCHANGE OUT DISTR |:EX10000 |500 |481 | |6 | PX PARTITION ITERATOR| |500 |387 | |7 | TABLE SCAN |t1(idx_t1_c2) |500 |387 | ============================================================= Outputs & filters: ------------------------------------- 0 - output([t1.a], [t1.b], [t4.c1], [t4.c2], [t4.c3], [t1.c1], [t1.c2]), filter(nil), equal_conds([t1.c2 = t4.c2]), other_conds(nil) 1 - output([t1.a], [t1.b], [t4.c1], [t4.c2], [t4.c3]), filter(nil), equal_conds([t1.a = t4.c2]), other_conds(nil) 2 - output([t4.c1], [t4.c2], [t4.c3]), filter(nil), access([t4.c1], [t4.c2], [t4.c3]), partitions(p0) 3 - output([t1.a], [t1.b]), filter(nil), access([t1.a], [t1.b]), partitions(p0) 4 - output([t1.c1], [t1.c2]), filter(nil) 5 - output([t1.c1], [t1.c2]), filter(nil), dop=1 6 - output([t1.c1], [t1.c2]), filter(nil) 7 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$CFEA49FE" (("opt"."t4"@"SEL$2" "hint"."t1"@"SEL$2") "opt"."t1"@"SEL$1")) USE_HASH(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1" LOCAL LOCAL) USE_MERGE(@"SEL$CFEA49FE" "hint"."t1"@"SEL$2") INDEX(@"SEL$CFEA49FE" "opt"."t4"@"SEL$2" "idx_t4_c2_c3") FULL(@"SEL$CFEA49FE" "hint"."t1"@"SEL$2") INDEX(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1" "idx_t1_c2") MERGE(@"SEL$2" > "SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" (("opt.t4"@"SEL$1" "hint.t1"@"SEL$1" )"opt.t1"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) LOCAL LOCAL) USE_MERGE(@"SEL$1" ("hint.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.t1"@"SEL$1" ) LOCAL LOCAL) INDEX(@"SEL$1" "opt"."t4"@"SEL$1" "idx_t4_c2_c3") FULL(@"SEL$1" "hint"."t1"@"SEL$1") INDEX(@"SEL$1" "opt"."t1"@"SEL$1" "idx_t1_c2") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 38(end) ************** *************** Case 39 *************** SQL: select /*+ idex(ta idx_t1_c2)*/ * from (select /*+ idex(opt.t4 idx_t4_c2))*/ * from hint.t1, opt.t4 where hint.t1.a = opt.t4.c2) as yeti, opt.t1 as ta where yeti.a = ta.c2; ============================================================= |ID|OPERATOR |NAME |EST. ROWS|COST| ------------------------------------------------------------- |0 |HASH JOIN | |365 |850 | |1 | MERGE JOIN | |91 |181 | |2 | TABLE SCAN |t4(idx_t4_c2_c3)|100 |78 | |3 | TABLE SCAN |t1 |100 |78 | |4 | PX COORDINATOR | |500 |528 | |5 | EXCHANGE OUT DISTR |:EX10000 |500 |481 | |6 | PX PARTITION ITERATOR| |500 |387 | |7 | TABLE SCAN |ta(idx_t1_c2) |500 |387 | ============================================================= Outputs & filters: ------------------------------------- 0 - output([t1.a], [t1.b], [t4.c1], [t4.c2], [t4.c3], [ta.c1], [ta.c2]), filter(nil), equal_conds([ta.c2 = t4.c2]), other_conds(nil) 1 - output([t1.a], [t1.b], [t4.c1], [t4.c2], [t4.c3]), filter(nil), equal_conds([t1.a = t4.c2]), other_conds(nil) 2 - output([t4.c1], [t4.c2], [t4.c3]), filter(nil), access([t4.c1], [t4.c2], [t4.c3]), partitions(p0) 3 - output([t1.a], [t1.b]), filter(nil), access([t1.a], [t1.b]), partitions(p0) 4 - output([ta.c1], [ta.c2]), filter(nil) 5 - output([ta.c1], [ta.c2]), filter(nil), dop=1 6 - output([ta.c1], [ta.c2]), filter(nil) 7 - output([ta.c1], [ta.c2]), filter(nil), access([ta.c1], [ta.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$CFEA49FE" (("opt"."t4"@"SEL$2" "hint"."t1"@"SEL$2") "opt"."ta"@"SEL$1")) USE_HASH(@"SEL$CFEA49FE" "opt"."ta"@"SEL$1") PQ_DISTRIBUTE(@"SEL$CFEA49FE" "opt"."ta"@"SEL$1" LOCAL LOCAL) USE_MERGE(@"SEL$CFEA49FE" "hint"."t1"@"SEL$2") INDEX(@"SEL$CFEA49FE" "opt"."t4"@"SEL$2" "idx_t4_c2_c3") FULL(@"SEL$CFEA49FE" "hint"."t1"@"SEL$2") INDEX(@"SEL$CFEA49FE" "opt"."ta"@"SEL$1" "idx_t1_c2") MERGE(@"SEL$2" > "SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" (("opt.t4"@"SEL$1" "hint.t1"@"SEL$1" )"opt.ta"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.ta"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.ta"@"SEL$1" ) LOCAL LOCAL) USE_MERGE(@"SEL$1" ("hint.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.t1"@"SEL$1" ) LOCAL LOCAL) INDEX(@"SEL$1" "opt"."t4"@"SEL$1" "idx_t4_c2_c3") FULL(@"SEL$1" "hint"."t1"@"SEL$1") INDEX(@"SEL$1" "opt"."ta"@"SEL$1" "idx_t1_c2") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 39(end) ************** *************** Case 40 *************** SQL: select /*+ idex(opt.t1 idx_t1_c2)*/ * from (select /*+ idex(opt.t4 idx_t4_c2))*/ * from hint.t1, opt.t4 where hint.t1.a = opt.t4.c2) as yeti, opt.t1 as ta where yeti.a = ta.c2; ============================================================= |ID|OPERATOR |NAME |EST. ROWS|COST| ------------------------------------------------------------- |0 |HASH JOIN | |365 |850 | |1 | MERGE JOIN | |91 |181 | |2 | TABLE SCAN |t4(idx_t4_c2_c3)|100 |78 | |3 | TABLE SCAN |t1 |100 |78 | |4 | PX COORDINATOR | |500 |528 | |5 | EXCHANGE OUT DISTR |:EX10000 |500 |481 | |6 | PX PARTITION ITERATOR| |500 |387 | |7 | TABLE SCAN |ta(idx_t1_c2) |500 |387 | ============================================================= Outputs & filters: ------------------------------------- 0 - output([t1.a], [t1.b], [t4.c1], [t4.c2], [t4.c3], [ta.c1], [ta.c2]), filter(nil), equal_conds([ta.c2 = t4.c2]), other_conds(nil) 1 - output([t1.a], [t1.b], [t4.c1], [t4.c2], [t4.c3]), filter(nil), equal_conds([t1.a = t4.c2]), other_conds(nil) 2 - output([t4.c1], [t4.c2], [t4.c3]), filter(nil), access([t4.c1], [t4.c2], [t4.c3]), partitions(p0) 3 - output([t1.a], [t1.b]), filter(nil), access([t1.a], [t1.b]), partitions(p0) 4 - output([ta.c1], [ta.c2]), filter(nil) 5 - output([ta.c1], [ta.c2]), filter(nil), dop=1 6 - output([ta.c1], [ta.c2]), filter(nil) 7 - output([ta.c1], [ta.c2]), filter(nil), access([ta.c1], [ta.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$CFEA49FE" (("opt"."t4"@"SEL$2" "hint"."t1"@"SEL$2") "opt"."ta"@"SEL$1")) USE_HASH(@"SEL$CFEA49FE" "opt"."ta"@"SEL$1") PQ_DISTRIBUTE(@"SEL$CFEA49FE" "opt"."ta"@"SEL$1" LOCAL LOCAL) USE_MERGE(@"SEL$CFEA49FE" "hint"."t1"@"SEL$2") INDEX(@"SEL$CFEA49FE" "opt"."t4"@"SEL$2" "idx_t4_c2_c3") FULL(@"SEL$CFEA49FE" "hint"."t1"@"SEL$2") INDEX(@"SEL$CFEA49FE" "opt"."ta"@"SEL$1" "idx_t1_c2") MERGE(@"SEL$2" > "SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" (("opt.t4"@"SEL$1" "hint.t1"@"SEL$1" )"opt.ta"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.ta"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.ta"@"SEL$1" ) LOCAL LOCAL) USE_MERGE(@"SEL$1" ("hint.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.t1"@"SEL$1" ) LOCAL LOCAL) INDEX(@"SEL$1" "opt"."t4"@"SEL$1" "idx_t4_c2_c3") FULL(@"SEL$1" "hint"."t1"@"SEL$1") INDEX(@"SEL$1" "opt"."ta"@"SEL$1" "idx_t1_c2") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 40(end) ************** *************** Case 41 *************** SQL: select /*+ full(opt.t1)*/ * from opt.t1 as ta , opt.t2 as tb where ta.c1 = tb.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 |ta |500 |387 | |7 | PX PARTITION ITERATOR | |300 |233 | |8 | TABLE SCAN |tb |300 |233 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(ta.c1, ta.c2, tb.c1, tb.c2, tb.c3)]), filter(nil) 1 - output([INTERNAL_FUNCTION(ta.c1, ta.c2, tb.c1, tb.c2, tb.c3)]), filter(nil), dop=1 2 - output([ta.c1], [tb.c1], [ta.c2], [tb.c2], [tb.c3]), filter(nil), equal_conds([ta.c1 = tb.c1]), other_conds(nil) 3 - output([ta.c1], [ta.c2]), filter(nil) 4 - (#keys=1, [ta.c1]), output([ta.c1], [ta.c2]), filter(nil), dop=1 5 - output([ta.c1], [ta.c2]), filter(nil) 6 - output([ta.c1], [ta.c2]), filter(nil), access([ta.c1], [ta.c2]), partitions(p[0-4]) 7 - output([tb.c1], [tb.c2], [tb.c3]), filter(nil) 8 - output([tb.c1], [tb.c2], [tb.c3]), filter(nil), access([tb.c1], [tb.c2], [tb.c3]), partitions(p[0-2]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("opt"."ta"@"SEL$1" "opt"."tb"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."tb"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."tb"@"SEL$1" PARTITION NONE) FULL(@"SEL$1" "opt"."ta"@"SEL$1") FULL(@"SEL$1" "opt"."tb"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.tb"@"SEL$1" "opt.ta"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.ta"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.ta"@"SEL$1" ) NONE PARTITION) FULL(@"SEL$1" "opt"."tb"@"SEL$1") FULL(@"SEL$1" "opt"."ta"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 41(end) ************** *************** Case 42 *************** SQL: select /*+ full(opt.t1 opt.t2)*/ * from opt.t1, opt.t2 where opt.t1.c1 = opt.t2.c2; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |PX COORDINATOR | |270 |1321| |1 | EXCHANGE OUT DISTR |:EX10001|270 |1234| |2 | HASH JOIN | |270 |1046| |3 | PX PARTITION ITERATOR | |500 |387 | |4 | TABLE SCAN |t1 |500 |387 | |5 | EXCHANGE IN DISTR | |300 |464 | |6 | EXCHANGE OUT DISTR (PKEY)|:EX10000|300 |391 | |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.c2], [t1.c2], [t2.c1], [t2.c3]), filter(nil), equal_conds([t1.c1 = t2.c2]), other_conds(nil) 3 - output([t1.c1], [t1.c2]), filter(nil) 4 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) 5 - output([t2.c2], [t2.c1], [t2.c3]), filter(nil) 6 - (#keys=1, [t2.c2]), output([t2.c2], [t2.c1], [t2.c3]), filter(nil), dop=1 7 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 8 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("opt"."t1"@"SEL$1" "opt"."t2"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."t2"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t2"@"SEL$1" NONE PARTITION) FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.t2"@"SEL$1" "opt.t1"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 42(end) ************** *************** Case 43 *************** SQL: select /*+ full(opt.t1 hint.t2)*/ * from opt.t1, hint.t2 where opt.t1.c1 = hint.t2.b; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |PX COORDINATOR | |90 |684 | |1 | EXCHANGE OUT DISTR |:EX10001|90 |669 | |2 | HASH JOIN | |90 |637 | |3 | EXCHANGE IN DISTR | |100 |106 | |4 | EXCHANGE OUT DISTR (PKEY)|:EX10000|100 |97 | |5 | TABLE SCAN |t2 |100 |78 | |6 | PX PARTITION ITERATOR | |500 |387 | |7 | TABLE SCAN |t1 |500 |387 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.a, t2.b)]), filter(nil) 1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.a, t2.b)]), filter(nil), dop=1 2 - output([t1.c1], [t2.b], [t2.a], [t1.c2]), filter(nil), equal_conds([t1.c1 = t2.b]), other_conds(nil) 3 - output([t2.b], [t2.a]), filter(nil) 4 - (#keys=1, [t2.b]), output([t2.b], [t2.a]), filter(nil), is_single, dop=1 5 - output([t2.a], [t2.b]), filter(nil), access([t2.a], [t2.b]), partitions(p0) 6 - output([t1.c1], [t1.c2]), filter(nil) 7 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("hint"."t2"@"SEL$1" "opt"."t1"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t1"@"SEL$1" PARTITION NONE) FULL(@"SEL$1" "hint"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("hint.t2"@"SEL$1" "opt.t1"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) FULL(@"SEL$1" "hint"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 43(end) ************** *************** Case 44 *************** SQL: select /*+ full(opt.t1) use_merge(ta)*/ * from opt.t1 as ta , opt.t2 as tb where ta.c1 = tb.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 |ta |500 |387 | |7 | PX PARTITION ITERATOR | |300 |233 | |8 | TABLE SCAN |tb |300 |233 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(ta.c1, ta.c2, tb.c1, tb.c2, tb.c3)]), filter(nil) 1 - output([INTERNAL_FUNCTION(ta.c1, ta.c2, tb.c1, tb.c2, tb.c3)]), filter(nil), dop=1 2 - output([ta.c1], [tb.c1], [ta.c2], [tb.c2], [tb.c3]), filter(nil), equal_conds([ta.c1 = tb.c1]), other_conds(nil) 3 - output([ta.c1], [ta.c2]), filter(nil) 4 - (#keys=1, [ta.c1]), output([ta.c1], [ta.c2]), filter(nil), dop=1 5 - output([ta.c1], [ta.c2]), filter(nil) 6 - output([ta.c1], [ta.c2]), filter(nil), access([ta.c1], [ta.c2]), partitions(p[0-4]) 7 - output([tb.c1], [tb.c2], [tb.c3]), filter(nil) 8 - output([tb.c1], [tb.c2], [tb.c3]), filter(nil), access([tb.c1], [tb.c2], [tb.c3]), partitions(p[0-2]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("opt"."ta"@"SEL$1" "opt"."tb"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."tb"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."tb"@"SEL$1" PARTITION NONE) FULL(@"SEL$1" "opt"."ta"@"SEL$1") FULL(@"SEL$1" "opt"."tb"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.tb"@"SEL$1" "opt.ta"@"SEL$1" )) USE_MERGE(@"SEL$1" ("opt.ta"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.ta"@"SEL$1" ) NONE PARTITION) FULL(@"SEL$1" "opt"."tb"@"SEL$1") FULL(@"SEL$1" "opt"."ta"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 44(end) ************** *************** Case 45 *************** SQL: select /*+ full(opt.ta) use_merge(ta)*/ * from opt.t1 as ta , opt.t2 as tb where ta.c1 = tb.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 |ta |500 |387 | |7 | PX PARTITION ITERATOR | |300 |233 | |8 | TABLE SCAN |tb |300 |233 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(ta.c1, ta.c2, tb.c1, tb.c2, tb.c3)]), filter(nil) 1 - output([INTERNAL_FUNCTION(ta.c1, ta.c2, tb.c1, tb.c2, tb.c3)]), filter(nil), dop=1 2 - output([ta.c1], [tb.c1], [ta.c2], [tb.c2], [tb.c3]), filter(nil), equal_conds([ta.c1 = tb.c1]), other_conds(nil) 3 - output([ta.c1], [ta.c2]), filter(nil) 4 - (#keys=1, [ta.c1]), output([ta.c1], [ta.c2]), filter(nil), dop=1 5 - output([ta.c1], [ta.c2]), filter(nil) 6 - output([ta.c1], [ta.c2]), filter(nil), access([ta.c1], [ta.c2]), partitions(p[0-4]) 7 - output([tb.c1], [tb.c2], [tb.c3]), filter(nil) 8 - output([tb.c1], [tb.c2], [tb.c3]), filter(nil), access([tb.c1], [tb.c2], [tb.c3]), partitions(p[0-2]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("opt"."ta"@"SEL$1" "opt"."tb"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."tb"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."tb"@"SEL$1" PARTITION NONE) FULL(@"SEL$1" "opt"."ta"@"SEL$1") FULL(@"SEL$1" "opt"."tb"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.tb"@"SEL$1" "opt.ta"@"SEL$1" )) USE_MERGE(@"SEL$1" ("opt.ta"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.ta"@"SEL$1" ) NONE PARTITION) FULL(@"SEL$1" "opt"."tb"@"SEL$1") FULL(@"SEL$1" "opt"."ta"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 45(end) ************** *************** Case 46 *************** SQL: select /*+ full(opt.t1 opt.t2) use_merge(opt.t1), use_nl(opt.t2)*/ * from opt.t1, opt.t2 where opt.t1.c1 = opt.t2.c2; =========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ----------------------------------------------------------- |0 |PX COORDINATOR | |270 |1523| |1 | EXCHANGE OUT DISTR |:EX10001|270 |1436| |2 | MERGE JOIN | |270 |1248| |3 | SORT | |300 |673 | |4 | EXCHANGE IN DISTR | |300 |464 | |5 | EXCHANGE OUT DISTR (PKEY)|:EX10000|300 |391 | |6 | PX PARTITION ITERATOR | |300 |233 | |7 | TABLE SCAN |t2 |300 |233 | |8 | SORT | |500 |490 | |9 | PX PARTITION ITERATOR | |500 |387 | |10| 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.c2], [t2.c1], [t2.c3], [t1.c2]), filter(nil), equal_conds([t1.c1 = t2.c2]), other_conds(nil) 3 - output([t2.c2], [t2.c1], [t2.c3]), filter(nil), sort_keys([t2.c2, ASC]) 4 - output([t2.c2], [t2.c1], [t2.c3]), filter(nil) 5 - (#keys=1, [t2.c2]), output([t2.c2], [t2.c1], [t2.c3]), filter(nil), dop=1 6 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 7 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]) 8 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort 9 - output([t1.c1], [t1.c2]), filter(nil) 10 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("opt"."t2"@"SEL$1" "opt"."t1"@"SEL$1")) USE_MERGE(@"SEL$1" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t1"@"SEL$1" PARTITION NONE) FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.t2"@"SEL$1" "opt.t1"@"SEL$1" )) USE_MERGE(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 46(end) ************** *************** Case 47 *************** SQL: select /*+ full(opt.t1 opt.t2) use_merge(opt.t1), use_bnl(opt.t2)*/ * from opt.t1, opt.t2 where opt.t1.c1 = opt.t2.c2; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |PX COORDINATOR | |270 |1321| |1 | EXCHANGE OUT DISTR |:EX10001|270 |1234| |2 | HASH JOIN | |270 |1046| |3 | PX PARTITION ITERATOR | |500 |387 | |4 | TABLE SCAN |t1 |500 |387 | |5 | EXCHANGE IN DISTR | |300 |464 | |6 | EXCHANGE OUT DISTR (PKEY)|:EX10000|300 |391 | |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.c2], [t1.c2], [t2.c1], [t2.c3]), filter(nil), equal_conds([t1.c1 = t2.c2]), other_conds(nil) 3 - output([t1.c1], [t1.c2]), filter(nil) 4 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) 5 - output([t2.c2], [t2.c1], [t2.c3]), filter(nil) 6 - (#keys=1, [t2.c2]), output([t2.c2], [t2.c1], [t2.c3]), filter(nil), dop=1 7 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 8 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("opt"."t1"@"SEL$1" "opt"."t2"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."t2"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t2"@"SEL$1" NONE PARTITION) FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "opt.t2"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t2"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t2"@"SEL$1" ) NONE PARTITION) FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 47(end) ************** *************** Case 48 *************** SQL: select /*+ full(opt.t1 hint.t2) use_merge(test), use_nl(opt.t1)*/ * from opt.t1, hint.t2 where opt.t1.c1 = hint.t2.b; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |PX COORDINATOR | |90 |687 | |1 | EXCHANGE OUT DISTR |:EX10001|90 |671 | |2 | HASH JOIN | |90 |639 | |3 | PX PARTITION ITERATOR | |500 |387 | |4 | TABLE SCAN |t1 |500 |387 | |5 | EXCHANGE IN DISTR | |100 |106 | |6 | EXCHANGE OUT DISTR (PKEY)|:EX10000|100 |97 | |7 | TABLE SCAN |t2 |100 |78 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.a, t2.b)]), filter(nil) 1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.a, t2.b)]), filter(nil), dop=1 2 - output([t1.c1], [t2.b], [t1.c2], [t2.a]), filter(nil), equal_conds([t1.c1 = t2.b]), other_conds(nil) 3 - output([t1.c1], [t1.c2]), filter(nil) 4 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) 5 - output([t2.b], [t2.a]), filter(nil) 6 - (#keys=1, [t2.b]), output([t2.b], [t2.a]), filter(nil), is_single, dop=1 7 - output([t2.a], [t2.b]), filter(nil), access([t2.a], [t2.b]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("opt"."t1"@"SEL$1" "hint"."t2"@"SEL$1")) USE_HASH(@"SEL$1" "hint"."t2"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "hint"."t2"@"SEL$1" NONE PARTITION) FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "hint"."t2"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "hint.t2"@"SEL$1" )) USE_HASH(@"SEL$1" ("hint.t2"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.t2"@"SEL$1" ) NONE PARTITION) FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "hint"."t2"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 48(end) ************** *************** Case 49 *************** SQL: select /*+ full(opt.t1 hint.t2) use_merge(test), use_bnl(opt.t1)*/ * from opt.t1, hint.t2 where opt.t1.c1 = hint.t2.b; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |PX COORDINATOR | |90 |684 | |1 | EXCHANGE OUT DISTR |:EX10001|90 |669 | |2 | HASH JOIN | |90 |637 | |3 | EXCHANGE IN DISTR | |100 |106 | |4 | EXCHANGE OUT DISTR (PKEY)|:EX10000|100 |97 | |5 | TABLE SCAN |t2 |100 |78 | |6 | PX PARTITION ITERATOR | |500 |387 | |7 | TABLE SCAN |t1 |500 |387 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.a, t2.b)]), filter(nil) 1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t2.a, t2.b)]), filter(nil), dop=1 2 - output([t1.c1], [t2.b], [t2.a], [t1.c2]), filter(nil), equal_conds([t1.c1 = t2.b]), other_conds(nil) 3 - output([t2.b], [t2.a]), filter(nil) 4 - (#keys=1, [t2.b]), output([t2.b], [t2.a]), filter(nil), is_single, dop=1 5 - output([t2.a], [t2.b]), filter(nil), access([t2.a], [t2.b]), partitions(p0) 6 - output([t1.c1], [t1.c2]), filter(nil) 7 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("hint"."t2"@"SEL$1" "opt"."t1"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t1"@"SEL$1" PARTITION NONE) FULL(@"SEL$1" "hint"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("hint.t2"@"SEL$1" "opt.t1"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) FULL(@"SEL$1" "hint"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 49(end) ************** *************** Case 50 *************** SQL: select /*+ ordered use_merge(ta,tb,tc,td)*/ * from opt.t1 as ta, opt.t2 as tb , hint.t1 as tc, hint.t2 as td where ta.c1 = tc.a and ta.c2 = tb.c1 and tb.c1 = td.b; ===================================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| --------------------------------------------------------------------- |0 |MERGE JOIN | |27 |2131| |1 | SORT | |90 |1983| |2 | MERGE JOIN | |90 |1931| |3 | PX COORDINATOR MERGE SORT | |450 |1818| |4 | EXCHANGE OUT DISTR |:EX10001 |450 |1674| |5 | SORT | |450 |1359| |6 | MERGE JOIN | |450 |1022| |7 | EXCHANGE IN MERGE SORT DISTR| |500 |528 | |8 | EXCHANGE OUT DISTR (PKEY) |:EX10000 |500 |481 | |9 | PX PARTITION ITERATOR | |500 |387 | |10| TABLE SCAN |ta(idx_t1_c2)|500 |387 | |11| SORT | |300 |299 | |12| PX PARTITION ITERATOR | |300 |233 | |13| TABLE SCAN |tb |300 |233 | |14| TABLE SCAN |tc |100 |78 | |15| SORT | |100 |133 | |16| TABLE SCAN |td |100 |78 | ===================================================================== Outputs & filters: ------------------------------------- 0 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3], [tc.a], [tc.b], [td.a], [td.b]), filter(nil), equal_conds([tb.c1 = td.b]), other_conds(nil) 1 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3], [tc.a], [tc.b]), filter(nil), sort_keys([tb.c1, ASC]) 2 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3], [tc.a], [tc.b]), filter(nil), equal_conds([ta.c1 = tc.a]), other_conds(nil) 3 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3]), filter(nil), sort_keys([ta.c1, ASC]) 4 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3]), filter(nil), dop=1 5 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3]), filter(nil), sort_keys([ta.c1, ASC]) 6 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3]), filter(nil), equal_conds([ta.c2 = tb.c1]), other_conds(nil) 7 - output([ta.c1], [ta.c2]), filter(nil), sort_keys([ta.c2, ASC]), Local Order 8 - (#keys=1, [ta.c2]), output([ta.c1], [ta.c2]), filter(nil), dop=1 9 - output([ta.c1], [ta.c2]), filter(nil) 10 - output([ta.c1], [ta.c2]), filter(nil), access([ta.c1], [ta.c2]), partitions(p[0-4]) 11 - output([tb.c1], [tb.c2], [tb.c3]), filter(nil), sort_keys([tb.c1, ASC]), local merge sort 12 - output([tb.c1], [tb.c2], [tb.c3]), filter(nil) 13 - output([tb.c1], [tb.c2], [tb.c3]), filter(nil), access([tb.c1], [tb.c2], [tb.c3]), partitions(p[0-2]) 14 - output([tc.a], [tc.b]), filter(nil), access([tc.a], [tc.b]), partitions(p0) 15 - output([td.a], [td.b]), filter(nil), sort_keys([td.b, ASC]) 16 - output([td.a], [td.b]), filter(nil), access([td.a], [td.b]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ((("opt"."ta"@"SEL$1" "opt"."tb"@"SEL$1") "hint"."tc"@"SEL$1") "hint"."td"@"SEL$1")) USE_MERGE(@"SEL$1" "hint"."td"@"SEL$1") USE_MERGE(@"SEL$1" "hint"."tc"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "hint"."tc"@"SEL$1" LOCAL LOCAL) USE_MERGE(@"SEL$1" "opt"."tb"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."tb"@"SEL$1" PARTITION NONE) ======= LEADING(@"SEL$1" ((("opt.ta"@"SEL$1" "opt.tb"@"SEL$1" )"hint.tc"@"SEL$1" )"hint.td"@"SEL$1" )) USE_MERGE(@"SEL$1" ("hint.td"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.td"@"SEL$1" ) LOCAL LOCAL) USE_MERGE(@"SEL$1" ("hint.tc"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.tc"@"SEL$1" ) LOCAL LOCAL) USE_MERGE(@"SEL$1" ("opt.tb"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.tb"@"SEL$1" ) PARTITION NONE) >>>>>>> implement spm part1 INDEX(@"SEL$1" "opt"."ta"@"SEL$1" "idx_t1_c2") FULL(@"SEL$1" "opt"."tb"@"SEL$1") FULL(@"SEL$1" "hint"."tc"@"SEL$1") FULL(@"SEL$1" "hint"."td"@"SEL$1") <<<<<<< HEAD OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 50(end) ************** *************** Case 51 *************** SQL: select /*+ ordered use_nl(ta tb tc td)*/ * from opt.t1 as ta, opt.t2 as tb , hint.t1 as tc, hint.t2 as td where ta.c1 = tc.a and ta.c2 = tb.c1 and tb.c1 = td.b; ================================================================= |ID|OPERATOR |NAME |EST. ROWS|COST| ----------------------------------------------------------------- |0 |NESTED-LOOP JOIN | |27 |7567| |1 | NESTED-LOOP JOIN | |90 |6761| |2 | PX COORDINATOR | |450 |4320| |3 | EXCHANGE OUT DISTR |:EX10001 |450 |4176| |4 | NESTED-LOOP JOIN | |450 |3861| |5 | EXCHANGE IN DISTR | |500 |528 | |6 | EXCHANGE OUT DISTR (PKEY)|:EX10000 |500 |481 | |7 | PX PARTITION ITERATOR | |500 |387 | |8 | TABLE SCAN |ta(idx_t1_c2)|500 |387 | |9 | PX PARTITION ITERATOR | |1 |18 | |10| TABLE GET |tb |1 |18 | |11| TABLE GET |tc |1 |5 | |12| MATERIAL | |100 |79 | |13| TABLE SCAN |td |100 |78 | ================================================================= Outputs & filters: ------------------------------------- 0 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3], [tc.a], [tc.b], [td.a], [td.b]), filter(nil), conds([tb.c1 = td.b]), nl_params_(nil) 1 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3], [tc.a], [tc.b]), filter(nil), conds(nil), nl_params_([ta.c1]) 2 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3]), filter(nil) 3 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3]), filter(nil), dop=1 4 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3]), filter(nil), conds(nil), nl_params_([ta.c2]) 5 - output([ta.c1], [ta.c2], [PARTITION_ID]), filter(nil) 6 - (#keys=1, [ta.c2]), output([ta.c1], [ta.c2], [PARTITION_ID]), filter(nil), dop=1 7 - output([ta.c1], [ta.c2]), filter(nil) 8 - output([ta.c1], [ta.c2]), filter(nil), access([ta.c1], [ta.c2]), partitions(p[0-4]) 9 - output([tb.c1], [tb.c2], [tb.c3]), filter(nil) 10 - output([tb.c1], [tb.c2], [tb.c3]), filter(nil), access([tb.c1], [tb.c2], [tb.c3]), partitions(p[0-2]) 11 - output([tc.a], [tc.b]), filter(nil), access([tc.a], [tc.b]), partitions(p0) 12 - output([td.a], [td.b]), filter(nil) 13 - output([td.a], [td.b]), filter(nil), access([td.a], [td.b]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ((("opt"."ta"@"SEL$1" "opt"."tb"@"SEL$1") "hint"."tc"@"SEL$1") "hint"."td"@"SEL$1")) USE_NL(@"SEL$1" "hint"."td"@"SEL$1") USE_NL_MATERIALIZATION(@"SEL$1" "hint"."td"@"SEL$1") USE_NL(@"SEL$1" "hint"."tc"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "hint"."tc"@"SEL$1" LOCAL LOCAL) USE_NL(@"SEL$1" "opt"."tb"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."tb"@"SEL$1" PARTITION NONE) ======= LEADING(@"SEL$1" ((("opt.ta"@"SEL$1" "opt.tb"@"SEL$1" )"hint.tc"@"SEL$1" )"hint.td"@"SEL$1" )) USE_NL(@"SEL$1" ("hint.td"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.td"@"SEL$1" ) LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$1" ("hint.td"@"SEL$1" )) USE_NL(@"SEL$1" ("hint.tc"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.tc"@"SEL$1" ) LOCAL LOCAL) NO_USE_NL_MATERIALIZATION(@"SEL$1" ("hint.tc"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.tb"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.tb"@"SEL$1" ) PARTITION NONE) NO_USE_NL_MATERIALIZATION(@"SEL$1" ("opt.tb"@"SEL$1" )) >>>>>>> implement spm part1 INDEX(@"SEL$1" "opt"."ta"@"SEL$1" "idx_t1_c2") FULL(@"SEL$1" "opt"."tb"@"SEL$1") FULL(@"SEL$1" "hint"."tc"@"SEL$1") FULL(@"SEL$1" "hint"."td"@"SEL$1") <<<<<<< HEAD OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 51(end) ************** *************** Case 52 *************** SQL: select /*+ ordered use_bnl(ta tb tc td)*/ * from opt.t1 as ta, opt.t2 as tb , hint.t1 as tc, hint.t2 as td where ta.c1 = tc.a and ta.c2 = tb.c1 and tb.c1 = td.b; ============================================================ |ID|OPERATOR |NAME |EST. ROWS|COST| ------------------------------------------------------------ |0 |HASH JOIN | |27 |1760| |1 | HASH JOIN | |90 |1634| |2 | PX COORDINATOR | |450 |1413| |3 | EXCHANGE OUT DISTR |:EX10001|450 |1269| |4 | HASH JOIN | |450 |954 | |5 | EXCHANGE IN DISTR | |500 |528 | |6 | EXCHANGE OUT DISTR (PKEY)|:EX10000|500 |481 | |7 | PX PARTITION ITERATOR | |500 |387 | |8 | TABLE SCAN |ta |500 |387 | |9 | PX PARTITION ITERATOR | |300 |233 | |10| TABLE SCAN |tb |300 |233 | |11| TABLE SCAN |tc |100 |78 | |12| TABLE SCAN |td |100 |78 | ============================================================ Outputs & filters: ------------------------------------- 0 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3], [tc.a], [tc.b], [td.a], [td.b]), filter(nil), equal_conds([tb.c1 = td.b]), other_conds(nil) 1 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3], [tc.a], [tc.b]), filter(nil), equal_conds([ta.c1 = tc.a]), other_conds(nil) 2 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3]), filter(nil) 3 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3]), filter(nil), dop=1 4 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3]), filter(nil), equal_conds([ta.c2 = tb.c1]), other_conds(nil) 5 - output([ta.c1], [ta.c2]), filter(nil) 6 - (#keys=1, [ta.c2]), output([ta.c1], [ta.c2]), filter(nil), dop=1 7 - output([ta.c1], [ta.c2]), filter(nil) 8 - output([ta.c1], [ta.c2]), filter(nil), access([ta.c1], [ta.c2]), partitions(p[0-4]) 9 - output([tb.c1], [tb.c2], [tb.c3]), filter(nil) 10 - output([tb.c1], [tb.c2], [tb.c3]), filter(nil), access([tb.c1], [tb.c2], [tb.c3]), partitions(p[0-2]) 11 - output([tc.a], [tc.b]), filter(nil), access([tc.a], [tc.b]), partitions(p0) 12 - output([td.a], [td.b]), filter(nil), access([td.a], [td.b]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ((("opt"."ta"@"SEL$1" "opt"."tb"@"SEL$1") "hint"."tc"@"SEL$1") "hint"."td"@"SEL$1")) USE_HASH(@"SEL$1" "hint"."td"@"SEL$1") USE_HASH(@"SEL$1" "hint"."tc"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "hint"."tc"@"SEL$1" LOCAL LOCAL) USE_HASH(@"SEL$1" "opt"."tb"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."tb"@"SEL$1" PARTITION NONE) ======= LEADING(@"SEL$1" ((("opt.ta"@"SEL$1" "opt.tb"@"SEL$1" )"hint.tc"@"SEL$1" )"hint.td"@"SEL$1" )) USE_HASH(@"SEL$1" ("hint.td"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.td"@"SEL$1" ) LOCAL LOCAL) USE_HASH(@"SEL$1" ("hint.tc"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.tc"@"SEL$1" ) LOCAL LOCAL) USE_HASH(@"SEL$1" ("opt.tb"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.tb"@"SEL$1" ) PARTITION NONE) >>>>>>> implement spm part1 FULL(@"SEL$1" "opt"."ta"@"SEL$1") FULL(@"SEL$1" "opt"."tb"@"SEL$1") FULL(@"SEL$1" "hint"."tc"@"SEL$1") FULL(@"SEL$1" "hint"."td"@"SEL$1") <<<<<<< HEAD OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 52(end) ************** *************** Case 53 *************** SQL: select /*+ ordered*/ * from opt.t1 as ta, opt.t2 as tb , hint.t1 as tc, hint.t2 as td where ta.c1 = tc.a and ta.c2 = tb.c1 and tb.c1 = td.b; ============================================================ |ID|OPERATOR |NAME |EST. ROWS|COST| ------------------------------------------------------------ |0 |HASH JOIN | |27 |1760| |1 | HASH JOIN | |90 |1634| |2 | PX COORDINATOR | |450 |1413| |3 | EXCHANGE OUT DISTR |:EX10001|450 |1269| |4 | HASH JOIN | |450 |954 | |5 | EXCHANGE IN DISTR | |500 |528 | |6 | EXCHANGE OUT DISTR (PKEY)|:EX10000|500 |481 | |7 | PX PARTITION ITERATOR | |500 |387 | |8 | TABLE SCAN |ta |500 |387 | |9 | PX PARTITION ITERATOR | |300 |233 | |10| TABLE SCAN |tb |300 |233 | |11| TABLE SCAN |tc |100 |78 | |12| TABLE SCAN |td |100 |78 | ============================================================ Outputs & filters: ------------------------------------- 0 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3], [tc.a], [tc.b], [td.a], [td.b]), filter(nil), equal_conds([tb.c1 = td.b]), other_conds(nil) 1 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3], [tc.a], [tc.b]), filter(nil), equal_conds([ta.c1 = tc.a]), other_conds(nil) 2 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3]), filter(nil) 3 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3]), filter(nil), dop=1 4 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3]), filter(nil), equal_conds([ta.c2 = tb.c1]), other_conds(nil) 5 - output([ta.c1], [ta.c2]), filter(nil) 6 - (#keys=1, [ta.c2]), output([ta.c1], [ta.c2]), filter(nil), dop=1 7 - output([ta.c1], [ta.c2]), filter(nil) 8 - output([ta.c1], [ta.c2]), filter(nil), access([ta.c1], [ta.c2]), partitions(p[0-4]) 9 - output([tb.c1], [tb.c2], [tb.c3]), filter(nil) 10 - output([tb.c1], [tb.c2], [tb.c3]), filter(nil), access([tb.c1], [tb.c2], [tb.c3]), partitions(p[0-2]) 11 - output([tc.a], [tc.b]), filter(nil), access([tc.a], [tc.b]), partitions(p0) 12 - output([td.a], [td.b]), filter(nil), access([td.a], [td.b]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ((("opt"."ta"@"SEL$1" "opt"."tb"@"SEL$1") "hint"."tc"@"SEL$1") "hint"."td"@"SEL$1")) USE_HASH(@"SEL$1" "hint"."td"@"SEL$1") USE_HASH(@"SEL$1" "hint"."tc"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "hint"."tc"@"SEL$1" LOCAL LOCAL) USE_HASH(@"SEL$1" "opt"."tb"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."tb"@"SEL$1" PARTITION NONE) ======= LEADING(@"SEL$1" ((("opt.ta"@"SEL$1" "opt.tb"@"SEL$1" )"hint.tc"@"SEL$1" )"hint.td"@"SEL$1" )) USE_HASH(@"SEL$1" ("hint.td"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.td"@"SEL$1" ) LOCAL LOCAL) USE_HASH(@"SEL$1" ("hint.tc"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.tc"@"SEL$1" ) LOCAL LOCAL) USE_HASH(@"SEL$1" ("opt.tb"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.tb"@"SEL$1" ) PARTITION NONE) >>>>>>> implement spm part1 FULL(@"SEL$1" "opt"."ta"@"SEL$1") FULL(@"SEL$1" "opt"."tb"@"SEL$1") FULL(@"SEL$1" "hint"."tc"@"SEL$1") FULL(@"SEL$1" "hint"."td"@"SEL$1") <<<<<<< HEAD OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 53(end) ************** *************** Case 54 *************** SQL: select /*+ leading(test, opt.t1 opt.t2) */ * from opt.t1, opt.t2 where opt.t1.c1 = opt.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) 6 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) 7 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 8 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("opt"."t1"@"SEL$1" "opt"."t2"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."t2"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t2"@"SEL$1" PARTITION NONE) FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.t2"@"SEL$1" "opt.t1"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) NONE PARTITION) FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 54(end) ************** *************** Case 55 *************** SQL: select /*+ leading(opt.t1 opt.t1 opt.t2) use_merge(opt.t1), use_nl(opt.t2)*/ * from opt.t1, opt.t2 where opt.t1.c1 = opt.t2.c1; ============================================================ |ID|OPERATOR |NAME |EST. ROWS|COST| ------------------------------------------------------------ |0 |PX COORDINATOR | |300 |1301| |1 | EXCHANGE OUT DISTR |:EX10001|300 |1205| |2 | MERGE JOIN | |300 |995 | |3 | SORT | |300 |299 | |4 | PX PARTITION ITERATOR | |300 |233 | |5 | TABLE SCAN |t2 |300 |233 | |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 | ============================================================ 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), sort_keys([t2.c1, ASC]), local merge sort 4 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 5 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]) 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) 9 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("opt"."t2"@"SEL$1" "opt"."t1"@"SEL$1")) USE_MERGE(@"SEL$1" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t1"@"SEL$1" NONE PARTITION) FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.t2"@"SEL$1" "opt.t1"@"SEL$1" )) USE_MERGE(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) NONE PARTITION) FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 55(end) ************** *************** Case 56 *************** SQL: select /*+ leading(opt.t1 opt.t1 opt.t2) use_merge(opt.t1), use_bnl(opt.t2)*/ * from opt.t1, opt.t2 where opt.t1.c1 = opt.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) 6 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) 7 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 8 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("opt"."t1"@"SEL$1" "opt"."t2"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."t2"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t2"@"SEL$1" PARTITION NONE) FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.t2"@"SEL$1" "opt.t1"@"SEL$1" )) USE_MERGE(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) NONE PARTITION) FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 56(end) ************** *************** Case 57 *************** SQL: select /*+ leading(opt.t1 opt.t2) */ * from opt.t1, opt.t2 where opt.t1.c1 = opt.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) 6 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) 7 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 8 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("opt"."t1"@"SEL$1" "opt"."t2"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."t2"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t2"@"SEL$1" PARTITION NONE) FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "opt.t2"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t2"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t2"@"SEL$1" ) PARTITION NONE) FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 57(end) ************** *************** Case 58 *************** SQL: select /*+ leading(opt.t1 opt.t2 ha hb) */ * from opt.t1, opt.t2, hint.t1 as ha, hint.t2 as hb where opt.t1.c1 = opt.t2.c1 and opt.t1.c1 = ha.a and opt.t2.c2 = hb.b; ============================================================ |ID|OPERATOR |NAME |EST. ROWS|COST| ------------------------------------------------------------ |0 |HASH JOIN | |49 |1559| |1 | HASH JOIN | |60 |1441| |2 | PX COORDINATOR | |300 |1260| |3 | EXCHANGE OUT DISTR |:EX10001|300 |1164| |4 | HASH JOIN | |300 |954 | |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 | |9 | PX PARTITION ITERATOR | |300 |233 | |10| TABLE SCAN |t2 |300 |233 | |11| TABLE SCAN |ha |100 |78 | |12| TABLE SCAN |hb |100 |78 | ============================================================ Outputs & filters: ------------------------------------- 0 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3], [ha.a], [ha.b], [hb.a], [hb.b]), filter(nil), equal_conds([t2.c2 = hb.b]), other_conds(nil) 1 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3], [ha.a], [ha.b]), filter(nil), equal_conds([t1.c1 = ha.a]), other_conds(nil) 2 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil) 3 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1 4 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), equal_conds([t1.c1 = t2.c1]), other_conds(nil) 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) 8 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) 9 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 10 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]) 11 - output([ha.a], [ha.b]), filter(nil), access([ha.a], [ha.b]), partitions(p0) 12 - output([hb.a], [hb.b]), filter(nil), access([hb.a], [hb.b]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ((("opt"."t1"@"SEL$1" "opt"."t2"@"SEL$1") "hint"."ha"@"SEL$1") "hint"."hb"@"SEL$1")) USE_HASH(@"SEL$1" "hint"."hb"@"SEL$1") USE_HASH(@"SEL$1" "hint"."ha"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "hint"."ha"@"SEL$1" LOCAL LOCAL) USE_HASH(@"SEL$1" "opt"."t2"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t2"@"SEL$1" PARTITION NONE) ======= LEADING(@"SEL$1" ((("opt.t1"@"SEL$1" "opt.t2"@"SEL$1" )"hint.ha"@"SEL$1" )"hint.hb"@"SEL$1" )) USE_HASH(@"SEL$1" ("hint.hb"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.hb"@"SEL$1" ) LOCAL LOCAL) USE_HASH(@"SEL$1" ("hint.ha"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.ha"@"SEL$1" ) LOCAL LOCAL) USE_HASH(@"SEL$1" ("opt.t2"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t2"@"SEL$1" ) PARTITION NONE) >>>>>>> implement spm part1 FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$1" "hint"."ha"@"SEL$1") FULL(@"SEL$1" "hint"."hb"@"SEL$1") <<<<<<< HEAD OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 58(end) ************** *************** Case 59 *************** SQL: select /*+ leading(opt.t1 opt.t2 ha hb) use_merge(opt.t1 ha) use_nl(opt.t1 hb)*/ * from opt.t1, opt.t2, hint.t1 as ha, hint.t2 as hb where opt.t1.c1 = opt.t2.c1 and opt.t1.c1 = ha.a and opt.t2.c2 = hb.b; ============================================================= |ID|OPERATOR |NAME |EST. ROWS|COST| ------------------------------------------------------------- |0 |NESTED-LOOP JOIN | |49 |2145| |1 | MERGE JOIN | |60 |1575| |2 | PX COORDINATOR MERGE SORT | |300 |1471| |3 | EXCHANGE OUT DISTR |:EX10001|300 |1375| |4 | SORT | |300 |1165| |5 | HASH JOIN | |300 |954 | |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 | |300 |233 | |11| TABLE SCAN |t2 |300 |233 | |12| TABLE SCAN |ha |100 |78 | |13| MATERIAL | |100 |79 | |14| TABLE SCAN |hb |100 |78 | ============================================================= Outputs & filters: ------------------------------------- 0 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3], [ha.a], [ha.b], [hb.a], [hb.b]), filter(nil), conds([t2.c2 = hb.b]), nl_params_(nil) 1 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3], [ha.a], [ha.b]), filter(nil), equal_conds([t1.c1 = ha.a]), other_conds(nil) 2 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), sort_keys([t1.c1, ASC]) 3 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1 4 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), sort_keys([t1.c1, ASC]) 5 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), equal_conds([t1.c1 = t2.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) 9 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) 10 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 11 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]) 12 - output([ha.a], [ha.b]), filter(nil), access([ha.a], [ha.b]), partitions(p0) 13 - output([hb.a], [hb.b]), filter(nil) 14 - output([hb.a], [hb.b]), filter(nil), access([hb.a], [hb.b]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ((("opt"."t1"@"SEL$1" "opt"."t2"@"SEL$1") "hint"."ha"@"SEL$1") "hint"."hb"@"SEL$1")) USE_NL(@"SEL$1" "hint"."hb"@"SEL$1") USE_NL_MATERIALIZATION(@"SEL$1" "hint"."hb"@"SEL$1") USE_MERGE(@"SEL$1" "hint"."ha"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "hint"."ha"@"SEL$1" LOCAL LOCAL) USE_HASH(@"SEL$1" "opt"."t2"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t2"@"SEL$1" PARTITION NONE) ======= LEADING(@"SEL$1" ((("opt.t1"@"SEL$1" "opt.t2"@"SEL$1" )"hint.ha"@"SEL$1" )"hint.hb"@"SEL$1" )) USE_NL(@"SEL$1" ("hint.hb"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.hb"@"SEL$1" ) LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$1" ("hint.hb"@"SEL$1" )) USE_MERGE(@"SEL$1" ("hint.ha"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.ha"@"SEL$1" ) LOCAL LOCAL) USE_HASH(@"SEL$1" ("opt.t2"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t2"@"SEL$1" ) PARTITION NONE) >>>>>>> implement spm part1 FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$1" "hint"."ha"@"SEL$1") FULL(@"SEL$1" "hint"."hb"@"SEL$1") <<<<<<< HEAD OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 59(end) ************** *************** Case 60 *************** SQL: select /*+ leading(opt.t1 opt.t2 ha hb) use_merge(opt.t1 ha) use_bnl(opt.t1 hb)*/ * from opt.t1, opt.t2, hint.t1 as ha, hint.t2 as hb where opt.t1.c1 = opt.t2.c1 and opt.t1.c1 = ha.a and opt.t2.c2 = hb.b; ============================================================= |ID|OPERATOR |NAME |EST. ROWS|COST| ------------------------------------------------------------- |0 |HASH JOIN | |49 |1693| |1 | MERGE JOIN | |60 |1575| |2 | PX COORDINATOR MERGE SORT | |300 |1471| |3 | EXCHANGE OUT DISTR |:EX10001|300 |1375| |4 | SORT | |300 |1165| |5 | HASH JOIN | |300 |954 | |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 | |300 |233 | |11| TABLE SCAN |t2 |300 |233 | |12| TABLE SCAN |ha |100 |78 | |13| TABLE SCAN |hb |100 |78 | ============================================================= Outputs & filters: ------------------------------------- 0 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3], [ha.a], [ha.b], [hb.a], [hb.b]), filter(nil), equal_conds([t2.c2 = hb.b]), other_conds(nil) 1 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3], [ha.a], [ha.b]), filter(nil), equal_conds([t1.c1 = ha.a]), other_conds(nil) 2 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), sort_keys([t1.c1, ASC]) 3 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1 4 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), sort_keys([t1.c1, ASC]) 5 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), equal_conds([t1.c1 = t2.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) 9 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) 10 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 11 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]) 12 - output([ha.a], [ha.b]), filter(nil), access([ha.a], [ha.b]), partitions(p0) 13 - output([hb.a], [hb.b]), filter(nil), access([hb.a], [hb.b]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ((("opt"."t1"@"SEL$1" "opt"."t2"@"SEL$1") "hint"."ha"@"SEL$1") "hint"."hb"@"SEL$1")) USE_HASH(@"SEL$1" "hint"."hb"@"SEL$1") USE_MERGE(@"SEL$1" "hint"."ha"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "hint"."ha"@"SEL$1" LOCAL LOCAL) USE_HASH(@"SEL$1" "opt"."t2"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t2"@"SEL$1" PARTITION NONE) ======= LEADING(@"SEL$1" ((("opt.t1"@"SEL$1" "opt.t2"@"SEL$1" )"hint.ha"@"SEL$1" )"hint.hb"@"SEL$1" )) USE_HASH(@"SEL$1" ("hint.hb"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.hb"@"SEL$1" ) LOCAL LOCAL) USE_MERGE(@"SEL$1" ("hint.ha"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.ha"@"SEL$1" ) LOCAL LOCAL) USE_HASH(@"SEL$1" ("opt.t2"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t2"@"SEL$1" ) PARTITION NONE) >>>>>>> implement spm part1 FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$1" "hint"."ha"@"SEL$1") FULL(@"SEL$1" "hint"."hb"@"SEL$1") <<<<<<< HEAD OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 60(end) ************** *************** Case 61 *************** SQL: select /*+ leading(test, opt.t1 opt.t2) use_merge(test opt.t1 opt.t2)*/ * from opt.t1, opt.t2 where opt.t1.c1 = opt.t2.c1; ============================================================ |ID|OPERATOR |NAME |EST. ROWS|COST| ------------------------------------------------------------ |0 |PX COORDINATOR | |300 |1301| |1 | EXCHANGE OUT DISTR |:EX10001|300 |1205| |2 | MERGE JOIN | |300 |995 | |3 | SORT | |300 |299 | |4 | PX PARTITION ITERATOR | |300 |233 | |5 | TABLE SCAN |t2 |300 |233 | |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 | ============================================================ 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), sort_keys([t2.c1, ASC]), local merge sort 4 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 5 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]) 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) 9 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("opt"."t2"@"SEL$1" "opt"."t1"@"SEL$1")) USE_MERGE(@"SEL$1" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t1"@"SEL$1" NONE PARTITION) FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.t2"@"SEL$1" "opt.t1"@"SEL$1" )) USE_MERGE(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) NONE PARTITION) FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 61(end) ************** *************** Case 62 *************** SQL: select /*+ leading(test, opt.t1 opt.t2) use_merge(test opt.t1) use_nl(test opt.t2)*/ * from opt.t1, opt.t2 where opt.t1.c1 = opt.t2.c1; ============================================================ |ID|OPERATOR |NAME |EST. ROWS|COST| ------------------------------------------------------------ |0 |PX COORDINATOR | |300 |1301| |1 | EXCHANGE OUT DISTR |:EX10001|300 |1205| |2 | MERGE JOIN | |300 |995 | |3 | SORT | |300 |299 | |4 | PX PARTITION ITERATOR | |300 |233 | |5 | TABLE SCAN |t2 |300 |233 | |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 | ============================================================ 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), sort_keys([t2.c1, ASC]), local merge sort 4 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 5 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]) 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) 9 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("opt"."t2"@"SEL$1" "opt"."t1"@"SEL$1")) USE_MERGE(@"SEL$1" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t1"@"SEL$1" NONE PARTITION) FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.t2"@"SEL$1" "opt.t1"@"SEL$1" )) USE_MERGE(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) NONE PARTITION) FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 62(end) ************** *************** Case 63 *************** SQL: select /*+ leading(test, opt.t1 opt.t2) use_merge(test opt.t1) use_bnl(test opt.t2)*/ * from opt.t1, opt.t2 where opt.t1.c1 = opt.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) 6 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) 7 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 8 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("opt"."t1"@"SEL$1" "opt"."t2"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."t2"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t2"@"SEL$1" PARTITION NONE) FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.t2"@"SEL$1" "opt.t1"@"SEL$1" )) USE_MERGE(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) NONE PARTITION) FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 63(end) ************** *************** Case 64 *************** SQL: select /*+ leading(opt.t1 opt.t1 opt.t2) use_nl(opt.t1 opt.t3 opt.t5)*/ * from opt.t1, opt.t2 where opt.t1.c1 = opt.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) 6 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) 7 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 8 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("opt"."t1"@"SEL$1" "opt"."t2"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."t2"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t2"@"SEL$1" PARTITION NONE) FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "opt.t2"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t2"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t2"@"SEL$1" ) PARTITION NONE) FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 64(end) ************** *************** Case 65 *************** SQL: select /*+ leading(opt.t1 opt.t1 opt.t2) use_bnl(opt.t1 opt.t3 opt.t5)*/ * from opt.t1, opt.t2 where opt.t1.c1 = opt.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) 6 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) 7 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 8 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("opt"."t1"@"SEL$1" "opt"."t2"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."t2"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t2"@"SEL$1" PARTITION NONE) FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.t2"@"SEL$1" "opt.t1"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) NONE PARTITION) FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 65(end) ************** *************** Case 66 *************** SQL: select /*+ leading(opt.t1 opt.t2) use_nl()*/ * from opt.t1, opt.t2 where opt.t1.c1 = opt.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) 6 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) 7 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 8 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("opt"."t1"@"SEL$1" "opt"."t2"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."t2"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t2"@"SEL$1" PARTITION NONE) FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "opt.t2"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t2"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t2"@"SEL$1" ) PARTITION NONE) FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 66(end) ************** *************** Case 67 *************** SQL: select /*+ leading(opt.t1 opt.t2) use_bnl()*/ * from opt.t1, opt.t2 where opt.t1.c1 = opt.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) 6 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) 7 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 8 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("opt"."t1"@"SEL$1" "opt"."t2"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."t2"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t2"@"SEL$1" PARTITION NONE) FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "opt.t2"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t2"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t2"@"SEL$1" ) PARTITION NONE) FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 67(end) ************** *************** Case 68 *************** SQL: select /*+ leading(opt.t1 opt.t2 ha hb) use_nl(ta hint.t1 hint.t2 tb)*/ * from opt.t1, opt.t2, hint.t1 as ha, hint.t2 as hb where opt.t1.c1 = opt.t2.c1 and opt.t1.c1 = ha.a and opt.t2.c2 = hb.b; ============================================================ |ID|OPERATOR |NAME |EST. ROWS|COST| ------------------------------------------------------------ |0 |HASH JOIN | |49 |1559| |1 | HASH JOIN | |60 |1441| |2 | PX COORDINATOR | |300 |1260| |3 | EXCHANGE OUT DISTR |:EX10001|300 |1164| |4 | HASH JOIN | |300 |954 | |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 | |9 | PX PARTITION ITERATOR | |300 |233 | |10| TABLE SCAN |t2 |300 |233 | |11| TABLE SCAN |ha |100 |78 | |12| TABLE SCAN |hb |100 |78 | ============================================================ Outputs & filters: ------------------------------------- 0 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3], [ha.a], [ha.b], [hb.a], [hb.b]), filter(nil), equal_conds([t2.c2 = hb.b]), other_conds(nil) 1 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3], [ha.a], [ha.b]), filter(nil), equal_conds([t1.c1 = ha.a]), other_conds(nil) 2 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil) 3 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1 4 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), equal_conds([t1.c1 = t2.c1]), other_conds(nil) 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) 8 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) 9 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 10 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]) 11 - output([ha.a], [ha.b]), filter(nil), access([ha.a], [ha.b]), partitions(p0) 12 - output([hb.a], [hb.b]), filter(nil), access([hb.a], [hb.b]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ((("opt"."t1"@"SEL$1" "opt"."t2"@"SEL$1") "hint"."ha"@"SEL$1") "hint"."hb"@"SEL$1")) USE_HASH(@"SEL$1" "hint"."hb"@"SEL$1") USE_HASH(@"SEL$1" "hint"."ha"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "hint"."ha"@"SEL$1" LOCAL LOCAL) USE_HASH(@"SEL$1" "opt"."t2"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t2"@"SEL$1" PARTITION NONE) ======= LEADING(@"SEL$1" ((("opt.t1"@"SEL$1" "opt.t2"@"SEL$1" )"hint.ha"@"SEL$1" )"hint.hb"@"SEL$1" )) USE_HASH(@"SEL$1" ("hint.hb"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.hb"@"SEL$1" ) LOCAL LOCAL) USE_HASH(@"SEL$1" ("hint.ha"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.ha"@"SEL$1" ) LOCAL LOCAL) USE_HASH(@"SEL$1" ("opt.t2"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t2"@"SEL$1" ) PARTITION NONE) >>>>>>> implement spm part1 FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$1" "hint"."ha"@"SEL$1") FULL(@"SEL$1" "hint"."hb"@"SEL$1") <<<<<<< HEAD OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 68(end) ************** *************** Case 69 *************** SQL: select /*+ leading(opt.t1 opt.t2 ha hb) use_bnl(ta hint.t1 hint.t2 tb)*/ * from opt.t1, opt.t2, hint.t1 as ha, hint.t2 as hb where opt.t1.c1 = opt.t2.c1 and opt.t1.c1 = ha.a and opt.t2.c2 = hb.b; ============================================================ |ID|OPERATOR |NAME |EST. ROWS|COST| ------------------------------------------------------------ |0 |HASH JOIN | |49 |1559| |1 | HASH JOIN | |60 |1441| |2 | PX COORDINATOR | |300 |1260| |3 | EXCHANGE OUT DISTR |:EX10001|300 |1164| |4 | HASH JOIN | |300 |954 | |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 | |9 | PX PARTITION ITERATOR | |300 |233 | |10| TABLE SCAN |t2 |300 |233 | |11| TABLE SCAN |ha |100 |78 | |12| TABLE SCAN |hb |100 |78 | ============================================================ Outputs & filters: ------------------------------------- 0 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3], [ha.a], [ha.b], [hb.a], [hb.b]), filter(nil), equal_conds([t2.c2 = hb.b]), other_conds(nil) 1 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3], [ha.a], [ha.b]), filter(nil), equal_conds([t1.c1 = ha.a]), other_conds(nil) 2 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil) 3 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1 4 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), equal_conds([t1.c1 = t2.c1]), other_conds(nil) 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) 8 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) 9 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 10 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]) 11 - output([ha.a], [ha.b]), filter(nil), access([ha.a], [ha.b]), partitions(p0) 12 - output([hb.a], [hb.b]), filter(nil), access([hb.a], [hb.b]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ((("opt"."t1"@"SEL$1" "opt"."t2"@"SEL$1") "hint"."ha"@"SEL$1") "hint"."hb"@"SEL$1")) USE_HASH(@"SEL$1" "hint"."hb"@"SEL$1") USE_HASH(@"SEL$1" "hint"."ha"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "hint"."ha"@"SEL$1" LOCAL LOCAL) USE_HASH(@"SEL$1" "opt"."t2"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t2"@"SEL$1" PARTITION NONE) ======= LEADING(@"SEL$1" ((("opt.t1"@"SEL$1" "opt.t2"@"SEL$1" )"hint.ha"@"SEL$1" )"hint.hb"@"SEL$1" )) USE_HASH(@"SEL$1" ("hint.hb"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.hb"@"SEL$1" ) LOCAL LOCAL) USE_HASH(@"SEL$1" ("hint.ha"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.ha"@"SEL$1" ) LOCAL LOCAL) USE_HASH(@"SEL$1" ("opt.t2"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t2"@"SEL$1" ) PARTITION NONE) >>>>>>> implement spm part1 FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$1" "hint"."ha"@"SEL$1") FULL(@"SEL$1" "hint"."hb"@"SEL$1") <<<<<<< HEAD OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 69(end) ************** *************** Case 70 *************** SQL: select t1.c1, v.c1 from t1, (select t2.c1 from t2, t4) v; =============================================================== |ID|OPERATOR |NAME |EST. ROWS|COST | --------------------------------------------------------------- |0 |NESTED-LOOP JOIN CARTESIAN | |15000000 |776917| |1 | NESTED-LOOP JOIN CARTESIAN| |30000 |2938 | |2 | TABLE SCAN |t4(idx_t4_c2)|100 |78 | |3 | MATERIAL | |300 |281 | |4 | PX COORDINATOR | |300 |280 | |5 | EXCHANGE OUT DISTR |:EX10000 |300 |263 | |6 | PX PARTITION ITERATOR | |300 |233 | |7 | TABLE SCAN |t2 |300 |233 | |8 | MATERIAL | |500 |468 | |9 | PX COORDINATOR | |500 |466 | |10| EXCHANGE OUT DISTR |:EX20000 |500 |439 | |11| PX PARTITION ITERATOR | |500 |387 | |12| TABLE SCAN |t1 |500 |387 | =============================================================== Outputs & filters: ------------------------------------- 0 - output([t1.c1], [t2.c1]), filter(nil), conds(nil), nl_params_(nil) 1 - output([t2.c1]), filter(nil), conds(nil), nl_params_(nil) 2 - output(nil), filter(nil), access([t4.c1]), partitions(p0) 3 - output([t2.c1]), filter(nil) 4 - output([t2.c1]), filter(nil) 5 - output([t2.c1]), filter(nil), dop=1 6 - output([t2.c1]), filter(nil) 7 - output([t2.c1]), filter(nil), access([t2.c1]), partitions(p[0-2]) 8 - output([t1.c1]), filter(nil) 9 - output([t1.c1]), filter(nil) 10 - output([t1.c1]), filter(nil), dop=1 11 - output([t1.c1]), filter(nil) 12 - output([t1.c1]), filter(nil), access([t1.c1]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$CFEA49FE" (("opt"."t4"@"SEL$2" "opt"."t2"@"SEL$2") "opt"."t1"@"SEL$1")) USE_NL(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1" LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1") USE_NL(@"SEL$CFEA49FE" "opt"."t2"@"SEL$2") PQ_DISTRIBUTE(@"SEL$CFEA49FE" "opt"."t2"@"SEL$2" LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$CFEA49FE" "opt"."t2"@"SEL$2") INDEX(@"SEL$CFEA49FE" "opt"."t4"@"SEL$2" "idx_t4_c2") FULL(@"SEL$CFEA49FE" "opt"."t2"@"SEL$2") FULL(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1") MERGE(@"SEL$2" > "SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" (("opt.t4"@"SEL$1" "opt.t2"@"SEL$1" )"opt.t1"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t1"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t2"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t2"@"SEL$1" ) LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t2"@"SEL$1" )) INDEX(@"SEL$1" "opt"."t4"@"SEL$1" "idx_t4_c2") FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 70(end) ************** *************** Case 71 *************** SQL: select t1.c1, v.c1 from t1, (select/*+index(t4 primary)*/ t2.c1 from t2, t4) v; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST | ---------------------------------------------------------- |0 |NESTED-LOOP JOIN CARTESIAN | |15000000 |776917| |1 | NESTED-LOOP JOIN CARTESIAN| |30000 |2938 | |2 | TABLE SCAN |t4 |100 |78 | |3 | MATERIAL | |300 |281 | |4 | PX COORDINATOR | |300 |280 | |5 | EXCHANGE OUT DISTR |:EX10000|300 |263 | |6 | PX PARTITION ITERATOR | |300 |233 | |7 | TABLE SCAN |t2 |300 |233 | |8 | MATERIAL | |500 |468 | |9 | PX COORDINATOR | |500 |466 | |10| EXCHANGE OUT DISTR |:EX20000|500 |439 | |11| PX PARTITION ITERATOR | |500 |387 | |12| TABLE SCAN |t1 |500 |387 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([t1.c1], [t2.c1]), filter(nil), conds(nil), nl_params_(nil) 1 - output([t2.c1]), filter(nil), conds(nil), nl_params_(nil) 2 - output(nil), filter(nil), access([t4.c1]), partitions(p0) 3 - output([t2.c1]), filter(nil) 4 - output([t2.c1]), filter(nil) 5 - output([t2.c1]), filter(nil), dop=1 6 - output([t2.c1]), filter(nil) 7 - output([t2.c1]), filter(nil), access([t2.c1]), partitions(p[0-2]) 8 - output([t1.c1]), filter(nil) 9 - output([t1.c1]), filter(nil) 10 - output([t1.c1]), filter(nil), dop=1 11 - output([t1.c1]), filter(nil) 12 - output([t1.c1]), filter(nil), access([t1.c1]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$CFEA49FE" (("opt"."t4"@"SEL$2" "opt"."t2"@"SEL$2") "opt"."t1"@"SEL$1")) USE_NL(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1" LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1") USE_NL(@"SEL$CFEA49FE" "opt"."t2"@"SEL$2") PQ_DISTRIBUTE(@"SEL$CFEA49FE" "opt"."t2"@"SEL$2" LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$CFEA49FE" "opt"."t2"@"SEL$2") FULL(@"SEL$CFEA49FE" "opt"."t4"@"SEL$2") FULL(@"SEL$CFEA49FE" "opt"."t2"@"SEL$2") FULL(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1") MERGE(@"SEL$2" > "SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" (("opt.t4"@"SEL$1" "opt.t2"@"SEL$1" )"opt.t1"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t1"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t2"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t2"@"SEL$1" ) LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t2"@"SEL$1" )) FULL(@"SEL$1" "opt"."t4"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 71(end) ************** *************** Case 72 *************** SQL: select/*+no_rewrite*/ t1.c1, v.c1 from t1, (select/*+index(t4 primary)*/ t2.c1 from t2, t4) v; =========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST | ----------------------------------------------------------- |0 |NESTED-LOOP JOIN CARTESIAN | |15000000 |777442| |1 | SUBPLAN SCAN |v |30000 |3464 | |2 | NESTED-LOOP JOIN CARTESIAN| |30000 |2938 | |3 | TABLE SCAN |t4 |100 |78 | |4 | MATERIAL | |300 |281 | |5 | PX COORDINATOR | |300 |280 | |6 | EXCHANGE OUT DISTR |:EX10000|300 |263 | |7 | PX PARTITION ITERATOR | |300 |233 | |8 | TABLE SCAN |t2 |300 |233 | |9 | MATERIAL | |500 |468 | |10| PX COORDINATOR | |500 |466 | |11| EXCHANGE OUT DISTR |:EX20000|500 |439 | |12| PX PARTITION ITERATOR | |500 |387 | |13| TABLE SCAN |t1 |500 |387 | =========================================================== Outputs & filters: ------------------------------------- 0 - output([t1.c1], [v.c1]), filter(nil), conds(nil), nl_params_(nil) 1 - output([v.c1]), filter(nil), access([v.c1]) 2 - output([t2.c1]), filter(nil), conds(nil), nl_params_(nil) 3 - output(nil), filter(nil), access([t4.c1]), partitions(p0) 4 - output([t2.c1]), filter(nil) 5 - output([t2.c1]), filter(nil) 6 - output([t2.c1]), filter(nil), dop=1 7 - output([t2.c1]), filter(nil) 8 - output([t2.c1]), filter(nil), access([t2.c1]), partitions(p[0-2]) 9 - output([t1.c1]), filter(nil) 10 - output([t1.c1]), filter(nil) 11 - output([t1.c1]), filter(nil), dop=1 12 - output([t1.c1]), filter(nil) 13 - output([t1.c1]), filter(nil), access([t1.c1]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("v"@"SEL$1" "opt"."t1"@"SEL$1")) USE_NL(@"SEL$1" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t1"@"SEL$1" LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$1" "opt"."t1"@"SEL$1") LEADING(@"SEL$2" ("opt"."t4"@"SEL$2" "opt"."t2"@"SEL$2")) USE_NL(@"SEL$2" "opt"."t2"@"SEL$2") PQ_DISTRIBUTE(@"SEL$2" "opt"."t2"@"SEL$2" LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$2" "opt"."t2"@"SEL$2") FULL(@"SEL$2" "opt"."t4"@"SEL$2") FULL(@"SEL$2" "opt"."t2"@"SEL$2") FULL(@"SEL$1" "opt"."t1"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("v"@"SEL$1" "opt.t1"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t1"@"SEL$1" )) LEADING(@"SEL$2" ("opt.t4"@"SEL$2" "opt.t2"@"SEL$2" )) USE_NL(@"SEL$2" ("opt.t2"@"SEL$2" )) PQ_DISTRIBUTE(@"SEL$2" ("opt.t2"@"SEL$2" ) LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$2" ("opt.t2"@"SEL$2" )) FULL(@"SEL$2" "opt"."t4"@"SEL$2") FULL(@"SEL$2" "opt"."t2"@"SEL$2") FULL(@"SEL$1" "opt"."t1"@"SEL$1") NO_REWRITE >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 72(end) ************** *************** Case 73 *************** SQL: select t1.c1, v.c1 from t1, (select/*+leading(t2)*/ t2.c1 from t2, t4) v; =============================================================== |ID|OPERATOR |NAME |EST. ROWS|COST | --------------------------------------------------------------- |0 |NESTED-LOOP JOIN CARTESIAN | |15000000 |782073| |1 | NESTED-LOOP JOIN CARTESIAN| |30000 |8095 | |2 | PX COORDINATOR | |300 |280 | |3 | EXCHANGE OUT DISTR |:EX10000 |300 |263 | |4 | PX PARTITION ITERATOR | |300 |233 | |5 | TABLE SCAN |t2 |300 |233 | |6 | MATERIAL | |100 |78 | |7 | TABLE SCAN |t4(idx_t4_c2)|100 |78 | |8 | MATERIAL | |500 |468 | |9 | PX COORDINATOR | |500 |466 | |10| EXCHANGE OUT DISTR |:EX20000 |500 |439 | |11| PX PARTITION ITERATOR | |500 |387 | |12| TABLE SCAN |t1 |500 |387 | =============================================================== Outputs & filters: ------------------------------------- 0 - output([t1.c1], [t2.c1]), filter(nil), conds(nil), nl_params_(nil) 1 - output([t2.c1]), filter(nil), conds(nil), nl_params_(nil) 2 - output([t2.c1]), filter(nil) 3 - output([t2.c1]), filter(nil), dop=1 4 - output([t2.c1]), filter(nil) 5 - output([t2.c1]), filter(nil), access([t2.c1]), partitions(p[0-2]) 6 - output(nil), filter(nil) 7 - output(nil), filter(nil), access([t4.c1]), partitions(p0) 8 - output([t1.c1]), filter(nil) 9 - output([t1.c1]), filter(nil) 10 - output([t1.c1]), filter(nil), dop=1 11 - output([t1.c1]), filter(nil) 12 - output([t1.c1]), filter(nil), access([t1.c1]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$CFEA49FE" (("opt"."t2"@"SEL$2" "opt"."t4"@"SEL$2") "opt"."t1"@"SEL$1")) USE_NL(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1" LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1") USE_NL(@"SEL$CFEA49FE" "opt"."t4"@"SEL$2") PQ_DISTRIBUTE(@"SEL$CFEA49FE" "opt"."t4"@"SEL$2" LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$CFEA49FE" "opt"."t4"@"SEL$2") FULL(@"SEL$CFEA49FE" "opt"."t2"@"SEL$2") INDEX(@"SEL$CFEA49FE" "opt"."t4"@"SEL$2" "idx_t4_c2") FULL(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1") MERGE(@"SEL$2" > "SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" (("opt.t2"@"SEL$1" "opt.t4"@"SEL$1" )"opt.t1"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t1"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t4"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t4"@"SEL$1" ) LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t4"@"SEL$1" )) FULL(@"SEL$1" "opt"."t2"@"SEL$1") INDEX(@"SEL$1" "opt"."t4"@"SEL$1" "idx_t4_c2") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 73(end) ************** *************** Case 74 *************** SQL: select t1.c1, v.c1 from t1, (select/*+read_consistency(weak)*/ t2.c1 from t2, t4) v; =============================================================== |ID|OPERATOR |NAME |EST. ROWS|COST | --------------------------------------------------------------- |0 |NESTED-LOOP JOIN CARTESIAN | |15000000 |776917| |1 | NESTED-LOOP JOIN CARTESIAN| |30000 |2938 | |2 | TABLE SCAN |t4(idx_t4_c2)|100 |78 | |3 | MATERIAL | |300 |281 | |4 | PX COORDINATOR | |300 |280 | |5 | EXCHANGE OUT DISTR |:EX10000 |300 |263 | |6 | PX PARTITION ITERATOR | |300 |233 | |7 | TABLE SCAN |t2 |300 |233 | |8 | MATERIAL | |500 |468 | |9 | PX COORDINATOR | |500 |466 | |10| EXCHANGE OUT DISTR |:EX20000 |500 |439 | |11| PX PARTITION ITERATOR | |500 |387 | |12| TABLE SCAN |t1 |500 |387 | =============================================================== Outputs & filters: ------------------------------------- 0 - output([t1.c1], [t2.c1]), filter(nil), conds(nil), nl_params_(nil) 1 - output([t2.c1]), filter(nil), conds(nil), nl_params_(nil) 2 - output(nil), filter(nil), access([t4.c1]), partitions(p0) 3 - output([t2.c1]), filter(nil) 4 - output([t2.c1]), filter(nil) 5 - output([t2.c1]), filter(nil), dop=1 6 - output([t2.c1]), filter(nil) 7 - output([t2.c1]), filter(nil), access([t2.c1]), partitions(p[0-2]) 8 - output([t1.c1]), filter(nil) 9 - output([t1.c1]), filter(nil) 10 - output([t1.c1]), filter(nil), dop=1 11 - output([t1.c1]), filter(nil) 12 - output([t1.c1]), filter(nil), access([t1.c1]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$CFEA49FE" (("opt"."t4"@"SEL$2" "opt"."t2"@"SEL$2") "opt"."t1"@"SEL$1")) USE_NL(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1" LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1") USE_NL(@"SEL$CFEA49FE" "opt"."t2"@"SEL$2") PQ_DISTRIBUTE(@"SEL$CFEA49FE" "opt"."t2"@"SEL$2" LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$CFEA49FE" "opt"."t2"@"SEL$2") INDEX(@"SEL$CFEA49FE" "opt"."t4"@"SEL$2" "idx_t4_c2") FULL(@"SEL$CFEA49FE" "opt"."t2"@"SEL$2") FULL(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1") MERGE(@"SEL$2" > "SEL$1") READ_CONSISTENCY( WEAK ) OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" (("opt.t4"@"SEL$1" "opt.t2"@"SEL$1" )"opt.t1"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t1"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t2"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t2"@"SEL$1" ) LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t2"@"SEL$1" )) INDEX(@"SEL$1" "opt"."t4"@"SEL$1" "idx_t4_c2") FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") READ_CONSISTENCY("WEAK") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 74(end) ************** *************** Case 75 *************** SQL: select t1.c1, v.c1 from t1, (select/*+use_nl(t2, t4)*/ t2.c1 from t2, t4 where t2.c1 = t4.c1) v; =========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ----------------------------------------------------------- |0 |NESTED-LOOP JOIN CARTESIAN | |45000 |3574| |1 | PX COORDINATOR | |90 |786 | |2 | EXCHANGE OUT DISTR |:EX10001|90 |777 | |3 | NESTED-LOOP JOIN | |90 |760 | |4 | EXCHANGE IN DISTR | |100 |94 | |5 | EXCHANGE OUT DISTR (PKEY)|:EX10000|100 |88 | |6 | TABLE SCAN |t4 |100 |78 | |7 | PX PARTITION ITERATOR | |1 |18 | |8 | TABLE GET |t2 |1 |18 | |9 | MATERIAL | |500 |468 | |10| PX COORDINATOR | |500 |466 | |11| EXCHANGE OUT DISTR |:EX20000|500 |439 | |12| PX PARTITION ITERATOR | |500 |387 | |13| TABLE SCAN |t1 |500 |387 | =========================================================== Outputs & filters: ------------------------------------- 0 - output([t1.c1], [t2.c1]), filter(nil), conds(nil), nl_params_(nil) 1 - output([t2.c1]), filter(nil) 2 - output([t2.c1]), filter(nil), dop=1 3 - output([t2.c1]), filter(nil), conds(nil), nl_params_([t4.c1]) 4 - output([PARTITION_ID], [t4.c1]), filter(nil) 5 - (#keys=1, [t4.c1]), output([PARTITION_ID], [t4.c1]), filter(nil), is_single, dop=1 6 - output([t4.c1]), filter(nil), access([t4.c1]), partitions(p0) 7 - output([t2.c1]), filter(nil) 8 - output([t2.c1]), filter(nil), access([t2.c1]), partitions(p[0-2]) 9 - output([t1.c1]), filter(nil) 10 - output([t1.c1]), filter(nil) 11 - output([t1.c1]), filter(nil), dop=1 12 - output([t1.c1]), filter(nil) 13 - output([t1.c1]), filter(nil), access([t1.c1]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$CFEA49FE" (("opt"."t4"@"SEL$2" "opt"."t2"@"SEL$2") "opt"."t1"@"SEL$1")) USE_NL(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1" LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1") USE_NL(@"SEL$CFEA49FE" "opt"."t2"@"SEL$2") PQ_DISTRIBUTE(@"SEL$CFEA49FE" "opt"."t2"@"SEL$2" PARTITION NONE) FULL(@"SEL$CFEA49FE" "opt"."t4"@"SEL$2") FULL(@"SEL$CFEA49FE" "opt"."t2"@"SEL$2") FULL(@"SEL$CFEA49FE" "opt"."t1"@"SEL$1") MERGE(@"SEL$2" > "SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" (("opt.t4"@"SEL$1" "opt.t2"@"SEL$1" )"opt.t1"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t1"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t2"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t2"@"SEL$1" ) PARTITION NONE) NO_USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t2"@"SEL$1" )) FULL(@"SEL$1" "opt"."t4"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 75(end) ************** *************** Case 76 *************** SQL: (select /*+read_consistency(weak)*/ c1 from t1) union (select c1 from t2); ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |PX COORDINATOR | |800 |1152| |1 | EXCHANGE OUT DISTR |:EX10001|800 |1108| |2 | HASH UNION DISTINCT | |800 |1025| |3 | PX PARTITION ITERATOR | |500 |387 | |4 | TABLE SCAN |t1 |500 |387 | |5 | EXCHANGE IN DISTR | |300 |280 | |6 | EXCHANGE OUT DISTR (PKEY)|:EX10000|300 |263 | |7 | PX PARTITION ITERATOR | |300 |233 | |8 | TABLE SCAN |t2 |300 |233 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(UNION([1]))]), filter(nil) 1 - output([INTERNAL_FUNCTION(UNION([1]))]), filter(nil), dop=1 2 - output([UNION([1])]), filter(nil) 3 - output([t1.c1]), filter(nil) 4 - output([t1.c1]), filter(nil), access([t1.c1]), partitions(p[0-4]) 5 - output([t2.c1]), filter(nil) 6 - (#keys=1, [t2.c1]), output([t2.c1]), filter(nil), dop=1 7 - output([t2.c1]), filter(nil) 8 - output([t2.c1]), filter(nil), access([t2.c1]), partitions(p[0-2]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD USE_HASH_SET(@"SET$1") PQ_SET(@"SET$1" NONE PARTITION) FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$2" "opt"."t2"@"SEL$2") READ_CONSISTENCY( WEAK ) OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$2" "opt"."t2"@"SEL$2") READ_CONSISTENCY("WEAK") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 76(end) ************** *************** Case 77 *************** SQL: (select /*+read_consistency(weak)*/ c1 from t1) union (select /*+read_consistency(strong)*/ c1 from t2); ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |PX COORDINATOR | |800 |1152| |1 | EXCHANGE OUT DISTR |:EX10001|800 |1108| |2 | HASH UNION DISTINCT | |800 |1025| |3 | PX PARTITION ITERATOR | |500 |387 | |4 | TABLE SCAN |t1 |500 |387 | |5 | EXCHANGE IN DISTR | |300 |280 | |6 | EXCHANGE OUT DISTR (PKEY)|:EX10000|300 |263 | |7 | PX PARTITION ITERATOR | |300 |233 | |8 | TABLE SCAN |t2 |300 |233 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(UNION([1]))]), filter(nil) 1 - output([INTERNAL_FUNCTION(UNION([1]))]), filter(nil), dop=1 2 - output([UNION([1])]), filter(nil) 3 - output([t1.c1]), filter(nil) 4 - output([t1.c1]), filter(nil), access([t1.c1]), partitions(p[0-4]) 5 - output([t2.c1]), filter(nil) 6 - (#keys=1, [t2.c1]), output([t2.c1]), filter(nil), dop=1 7 - output([t2.c1]), filter(nil) 8 - output([t2.c1]), filter(nil), access([t2.c1]), partitions(p[0-2]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD USE_HASH_SET(@"SET$1") PQ_SET(@"SET$1" NONE PARTITION) FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$2" "opt"."t2"@"SEL$2") READ_CONSISTENCY( WEAK ) OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$2" "opt"."t2"@"SEL$2") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 77(end) ************** *************** Case 78 *************** SQL: select * from opt.t1 ignore index (primary); ========================================================= |ID|OPERATOR |NAME |EST. ROWS|COST| --------------------------------------------------------- |0 |PX COORDINATOR | |500 |528 | |1 | EXCHANGE OUT DISTR |:EX10000 |500 |481 | |2 | PX PARTITION ITERATOR| |500 |387 | |3 | TABLE SCAN |t1(idx_t1_c2)|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) 3 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "opt"."t1"@"SEL$1" "idx_t1_c2") <<<<<<< HEAD OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 78(end) ************** *************** Case 79 *************** SQL: select /*+ index(@a0123456789012345678 t4@a0123456789012345678 idx_t4_c3)*/ * from t1 where c1 in (select/*+qb_name(a0123456789012345678)*/ c1 from t4); =============================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| --------------------------------------------------------------- |0 |PX COORDINATOR | |10 |176 | |1 | EXCHANGE OUT DISTR |:EX10001 |10 |175 | |2 | NESTED-LOOP JOIN | |10 |172 | |3 | EXCHANGE IN DISTR | |10 |106 | |4 | EXCHANGE OUT DISTR (PKEY)|:EX10000 |10 |105 | |5 | SUBPLAN SCAN |VIEW2 |10 |104 | |6 | HASH DISTINCT | |10 |104 | |7 | TABLE SCAN |t4(idx_t4_c3)|100 |78 | |8 | PX PARTITION ITERATOR | |1 |29 | |9 | TABLE GET |t1 |1 |29 | =============================================================== 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), conds(nil), nl_params_([VIEW2.VIEW1.c1]) 3 - output([PARTITION_ID], [VIEW2.VIEW1.c1]), filter(nil) 4 - (#keys=1, [VIEW2.VIEW1.c1]), output([PARTITION_ID], [VIEW2.VIEW1.c1]), filter(nil), is_single, dop=1 5 - output([VIEW2.VIEW1.c1]), filter(nil), access([VIEW2.VIEW1.c1]) 6 - output([t4.c1]), filter(nil), distinct([t4.c1]) 7 - output([t4.c1]), filter(nil), access([t4.c1]), partitions(p0) 8 - output([t1.c1], [t1.c2]), filter(nil) 9 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$229D0D08" ("VIEW2"@"SEL$0BA0FCD5" "opt"."t1"@"SEL$1")) USE_NL(@"SEL$229D0D08" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$229D0D08" "opt"."t1"@"SEL$1" PARTITION NONE) USE_HASH_DISTINCT(@"SEL$97DDBBDC") INDEX(@"SEL$97DDBBDC" "opt"."t4"@"A0123456789012345678" "idx_t4_c3") FULL(@"SEL$229D0D08" "opt"."t1"@"SEL$1") UNNEST(@"A0123456789012345678") SEMI_TO_INNER(@"SEL$0BA0FCD5" "VIEW1") MERGE(@"A0123456789012345678" < "SEL$BC75C441") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("VIEW2"@"SEL$1" "opt.t1"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) NO_USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t1"@"SEL$1" )) INDEX(@"SEL$2" "opt"."t4"@"SEL$2" "idx_t4_c3") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 79(end) ************** *************** Case 80 *************** SQL: select /*+ index(@a01234567890123456789 t4@a01234567890123456789 idx_t4_c3)*/ * from t1 where c1 in (select/*+qb_name(a01234567890123456789)*/ c1 from t4); ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |PX COORDINATOR | |10 |154 | |1 | EXCHANGE OUT DISTR |:EX10001|10 |153 | |2 | NESTED-LOOP JOIN | |10 |150 | |3 | EXCHANGE IN DISTR | |10 |84 | |4 | EXCHANGE OUT DISTR (PKEY)|:EX10000|10 |83 | |5 | SUBPLAN SCAN |VIEW2 |10 |82 | |6 | MERGE DISTINCT | |10 |82 | |7 | TABLE SCAN |t4 |100 |78 | |8 | PX PARTITION ITERATOR | |1 |29 | |9 | TABLE GET |t1 |1 |29 | ========================================================== 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), conds(nil), nl_params_([VIEW2.VIEW1.c1]) 3 - output([PARTITION_ID], [VIEW2.VIEW1.c1]), filter(nil) 4 - (#keys=1, [VIEW2.VIEW1.c1]), output([PARTITION_ID], [VIEW2.VIEW1.c1]), filter(nil), is_single, dop=1 5 - output([VIEW2.VIEW1.c1]), filter(nil), access([VIEW2.VIEW1.c1]) 6 - output([t4.c1]), filter(nil), distinct([t4.c1]) 7 - output([t4.c1]), filter(nil), access([t4.c1]), partitions(p0) 8 - output([t1.c1], [t1.c2]), filter(nil) 9 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$E5385516" ("VIEW2"@"SEL$6FCAE2AA" "opt"."t1"@"SEL$1")) USE_NL(@"SEL$E5385516" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$E5385516" "opt"."t1"@"SEL$1" PARTITION NONE) FULL(@"SEL$8A1445BC" "opt"."t4"@"SEL$2") FULL(@"SEL$E5385516" "opt"."t1"@"SEL$1") UNNEST(@"SEL$2") SEMI_TO_INNER(@"SEL$6FCAE2AA" "VIEW1") MERGE(@"SEL$2" < "SEL$7BD09C5F") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("VIEW2"@"SEL$1" "opt.t1"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) NO_USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t1"@"SEL$1" )) FULL(@"SEL$2" "opt"."t4"@"SEL$2") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 80(end) ************** *************** Case 81 *************** SQL: select /*+ index(@SEL$1 t4 idx_t4_c3)*/ * from t1 where c1 in (select/*+qb_name(yz)*/ c1 from t4); ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |PX COORDINATOR | |10 |154 | |1 | EXCHANGE OUT DISTR |:EX10001|10 |153 | |2 | NESTED-LOOP JOIN | |10 |150 | |3 | EXCHANGE IN DISTR | |10 |84 | |4 | EXCHANGE OUT DISTR (PKEY)|:EX10000|10 |83 | |5 | SUBPLAN SCAN |VIEW2 |10 |82 | |6 | MERGE DISTINCT | |10 |82 | |7 | TABLE SCAN |t4 |100 |78 | |8 | PX PARTITION ITERATOR | |1 |29 | |9 | TABLE GET |t1 |1 |29 | ========================================================== 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), conds(nil), nl_params_([VIEW2.VIEW1.c1]) 3 - output([PARTITION_ID], [VIEW2.VIEW1.c1]), filter(nil) 4 - (#keys=1, [VIEW2.VIEW1.c1]), output([PARTITION_ID], [VIEW2.VIEW1.c1]), filter(nil), is_single, dop=1 5 - output([VIEW2.VIEW1.c1]), filter(nil), access([VIEW2.VIEW1.c1]) 6 - output([t4.c1]), filter(nil), distinct([t4.c1]) 7 - output([t4.c1]), filter(nil), access([t4.c1]), partitions(p0) 8 - output([t1.c1], [t1.c2]), filter(nil) 9 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$28655DBE" ("VIEW2"@"SEL$8623AD9A" "opt"."t1"@"SEL$1")) USE_NL(@"SEL$28655DBE" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$28655DBE" "opt"."t1"@"SEL$1" PARTITION NONE) FULL(@"SEL$ECCDB03E" "opt"."t4"@"YZ") FULL(@"SEL$28655DBE" "opt"."t1"@"SEL$1") UNNEST(@"YZ") SEMI_TO_INNER(@"SEL$8623AD9A" "VIEW1") MERGE(@"YZ" < "SEL$B68D94F7") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("VIEW2"@"SEL$1" "opt.t1"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) NO_USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t1"@"SEL$1" )) FULL(@"SEL$2" "opt"."t4"@"SEL$2") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 81(end) ************** *************** Case 82 *************** SQL: select /*+ leading(@SEL$1 t4 t1)*/ * from t1 , (select/*+qb_name(yz)*/ c1 from t4) t where t.c1 = t1.c1; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |PX COORDINATOR | |90 |660 | |1 | EXCHANGE OUT DISTR |:EX10001|90 |649 | |2 | HASH JOIN | |90 |624 | |3 | EXCHANGE IN DISTR | |100 |94 | |4 | EXCHANGE OUT DISTR (PKEY)|:EX10000|100 |88 | |5 | TABLE SCAN |t4 |100 |78 | |6 | PX PARTITION ITERATOR | |500 |387 | |7 | TABLE SCAN |t1 |500 |387 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t4.c1)]), filter(nil) 1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t4.c1)]), filter(nil), dop=1 2 - output([t4.c1], [t1.c1], [t1.c2]), filter(nil), equal_conds([t4.c1 = t1.c1]), other_conds(nil) 3 - output([t4.c1]), filter(nil) 4 - (#keys=1, [t4.c1]), output([t4.c1]), filter(nil), is_single, dop=1 5 - output([t4.c1]), filter(nil), access([t4.c1]), partitions(p0) 6 - output([t1.c1], [t1.c2]), filter(nil) 7 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$260306CE" ("opt"."t4"@"YZ" "opt"."t1"@"SEL$1")) USE_HASH(@"SEL$260306CE" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$260306CE" "opt"."t1"@"SEL$1" PARTITION NONE) FULL(@"SEL$260306CE" "opt"."t4"@"YZ") FULL(@"SEL$260306CE" "opt"."t1"@"SEL$1") MERGE(@"YZ" > "SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.t4"@"SEL$1" "opt.t1"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) FULL(@"SEL$1" "opt"."t4"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 82(end) ************** *************** Case 83 *************** SQL: select /*+ leading(@SEL$1 t1 t4)*/ * from t1 , (select/*+qb_name(yz)*/ c1 from t4) t where t.c1 = t1.c1; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |PX COORDINATOR | |90 |663 | |1 | EXCHANGE OUT DISTR |:EX10001|90 |652 | |2 | HASH JOIN | |90 |627 | |3 | PX PARTITION ITERATOR | |500 |387 | |4 | TABLE SCAN |t1 |500 |387 | |5 | EXCHANGE IN DISTR | |100 |94 | |6 | EXCHANGE OUT DISTR (PKEY)|:EX10000|100 |88 | |7 | TABLE SCAN |t4 |100 |78 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t4.c1)]), filter(nil) 1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t4.c1)]), filter(nil), dop=1 2 - output([t4.c1], [t1.c1], [t1.c2]), filter(nil), equal_conds([t4.c1 = t1.c1]), other_conds(nil) 3 - output([t1.c1], [t1.c2]), filter(nil) 4 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) 5 - output([t4.c1]), filter(nil) 6 - (#keys=1, [t4.c1]), output([t4.c1]), filter(nil), is_single, dop=1 7 - output([t4.c1]), filter(nil), access([t4.c1]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$260306CE" ("opt"."t1"@"SEL$1" "opt"."t4"@"YZ")) USE_HASH(@"SEL$260306CE" "opt"."t4"@"YZ") PQ_DISTRIBUTE(@"SEL$260306CE" "opt"."t4"@"YZ" NONE PARTITION) FULL(@"SEL$260306CE" "opt"."t1"@"SEL$1") FULL(@"SEL$260306CE" "opt"."t4"@"YZ") MERGE(@"YZ" > "SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "opt.t4"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t4"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t4"@"SEL$1" ) NONE PARTITION) FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t4"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 83(end) ************** *************** Case 84 *************** SQL: select /*+ leading(@SEL$1 t1@SEL$1 t4@YZ)*/ * from t1 , (select/*+qb_name(yz)*/ c1 from t4) t where t.c1 = t1.c1; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |PX COORDINATOR | |90 |663 | |1 | EXCHANGE OUT DISTR |:EX10001|90 |652 | |2 | HASH JOIN | |90 |627 | |3 | PX PARTITION ITERATOR | |500 |387 | |4 | TABLE SCAN |t1 |500 |387 | |5 | EXCHANGE IN DISTR | |100 |94 | |6 | EXCHANGE OUT DISTR (PKEY)|:EX10000|100 |88 | |7 | TABLE SCAN |t4 |100 |78 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t4.c1)]), filter(nil) 1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t4.c1)]), filter(nil), dop=1 2 - output([t4.c1], [t1.c1], [t1.c2]), filter(nil), equal_conds([t4.c1 = t1.c1]), other_conds(nil) 3 - output([t1.c1], [t1.c2]), filter(nil) 4 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) 5 - output([t4.c1]), filter(nil) 6 - (#keys=1, [t4.c1]), output([t4.c1]), filter(nil), is_single, dop=1 7 - output([t4.c1]), filter(nil), access([t4.c1]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$260306CE" ("opt"."t1"@"SEL$1" "opt"."t4"@"YZ")) USE_HASH(@"SEL$260306CE" "opt"."t4"@"YZ") PQ_DISTRIBUTE(@"SEL$260306CE" "opt"."t4"@"YZ" NONE PARTITION) FULL(@"SEL$260306CE" "opt"."t1"@"SEL$1") FULL(@"SEL$260306CE" "opt"."t4"@"YZ") MERGE(@"YZ" > "SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "opt.t4"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t4"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t4"@"SEL$1" ) NONE PARTITION) FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t4"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 84(end) ************** *************** Case 85 *************** SQL: select /*+ leading(@SEL$1 t4@YZ t1@SEL$1)*/ * from t1 , (select/*+qb_name(yz)*/ c1 from t4) t where t.c1 = t1.c1; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |PX COORDINATOR | |90 |660 | |1 | EXCHANGE OUT DISTR |:EX10001|90 |649 | |2 | HASH JOIN | |90 |624 | |3 | EXCHANGE IN DISTR | |100 |94 | |4 | EXCHANGE OUT DISTR (PKEY)|:EX10000|100 |88 | |5 | TABLE SCAN |t4 |100 |78 | |6 | PX PARTITION ITERATOR | |500 |387 | |7 | TABLE SCAN |t1 |500 |387 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t4.c1)]), filter(nil) 1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t4.c1)]), filter(nil), dop=1 2 - output([t4.c1], [t1.c1], [t1.c2]), filter(nil), equal_conds([t4.c1 = t1.c1]), other_conds(nil) 3 - output([t4.c1]), filter(nil) 4 - (#keys=1, [t4.c1]), output([t4.c1]), filter(nil), is_single, dop=1 5 - output([t4.c1]), filter(nil), access([t4.c1]), partitions(p0) 6 - output([t1.c1], [t1.c2]), filter(nil) 7 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$260306CE" ("opt"."t4"@"YZ" "opt"."t1"@"SEL$1")) USE_HASH(@"SEL$260306CE" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$260306CE" "opt"."t1"@"SEL$1" PARTITION NONE) FULL(@"SEL$260306CE" "opt"."t4"@"YZ") FULL(@"SEL$260306CE" "opt"."t1"@"SEL$1") MERGE(@"YZ" > "SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.t4"@"SEL$1" "opt.t1"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) FULL(@"SEL$1" "opt"."t4"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 85(end) ************** *************** Case 86 *************** SQL: select /*+ leading(@SEL$1 t_a@YZ t1@SEL$1)*/ * from t1 , (select/*+qb_name(yz)*/ c1 from t4 t_a) t where t.c1 = t1.c1; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |PX COORDINATOR | |90 |660 | |1 | EXCHANGE OUT DISTR |:EX10001|90 |649 | |2 | HASH JOIN | |90 |624 | |3 | EXCHANGE IN DISTR | |100 |94 | |4 | EXCHANGE OUT DISTR (PKEY)|:EX10000|100 |88 | |5 | TABLE SCAN |t_a |100 |78 | |6 | PX PARTITION ITERATOR | |500 |387 | |7 | TABLE SCAN |t1 |500 |387 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t_a.c1)]), filter(nil) 1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t_a.c1)]), filter(nil), dop=1 2 - output([t_a.c1], [t1.c1], [t1.c2]), filter(nil), equal_conds([t_a.c1 = t1.c1]), other_conds(nil) 3 - output([t_a.c1]), filter(nil) 4 - (#keys=1, [t_a.c1]), output([t_a.c1]), filter(nil), is_single, dop=1 5 - output([t_a.c1]), filter(nil), access([t_a.c1]), partitions(p0) 6 - output([t1.c1], [t1.c2]), filter(nil) 7 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$260306CE" ("opt"."t_a"@"YZ" "opt"."t1"@"SEL$1")) USE_HASH(@"SEL$260306CE" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$260306CE" "opt"."t1"@"SEL$1" PARTITION NONE) FULL(@"SEL$260306CE" "opt"."t_a"@"YZ") FULL(@"SEL$260306CE" "opt"."t1"@"SEL$1") MERGE(@"YZ" > "SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.t_a"@"SEL$1" "opt.t1"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) FULL(@"SEL$1" "opt"."t_a"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 86(end) ************** *************** Case 87 *************** SQL: select /*+ leading(@SEL$1 t4@YZ t1@SEL$1)*/ * from t1 , (select/*+qb_name(yz)*/ c1 from t4 t_a) t where t.c1 = t1.c1; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |PX COORDINATOR | |90 |660 | |1 | EXCHANGE OUT DISTR |:EX10001|90 |649 | |2 | HASH JOIN | |90 |624 | |3 | EXCHANGE IN DISTR | |100 |94 | |4 | EXCHANGE OUT DISTR (PKEY)|:EX10000|100 |88 | |5 | TABLE SCAN |t_a |100 |78 | |6 | PX PARTITION ITERATOR | |500 |387 | |7 | TABLE SCAN |t1 |500 |387 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t_a.c1)]), filter(nil) 1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t_a.c1)]), filter(nil), dop=1 2 - output([t_a.c1], [t1.c1], [t1.c2]), filter(nil), equal_conds([t_a.c1 = t1.c1]), other_conds(nil) 3 - output([t_a.c1]), filter(nil) 4 - (#keys=1, [t_a.c1]), output([t_a.c1]), filter(nil), is_single, dop=1 5 - output([t_a.c1]), filter(nil), access([t_a.c1]), partitions(p0) 6 - output([t1.c1], [t1.c2]), filter(nil) 7 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$260306CE" ("opt"."t_a"@"YZ" "opt"."t1"@"SEL$1")) USE_HASH(@"SEL$260306CE" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$260306CE" "opt"."t1"@"SEL$1" PARTITION NONE) FULL(@"SEL$260306CE" "opt"."t_a"@"YZ") FULL(@"SEL$260306CE" "opt"."t1"@"SEL$1") MERGE(@"YZ" > "SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.t_a"@"SEL$1" "opt.t1"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) FULL(@"SEL$1" "opt"."t_a"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 87(end) ************** *************** Case 88 *************** SQL: select /*+ leading(@SEL$1 t4@YZ t1@SEL$1) use_nl(@SEL$1 t1@SEL$1)*/ * from t1 , (select/*+qb_name(yz)*/ c1 from t4) t where t.c1 = t1.c1; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |PX COORDINATOR | |90 |794 | |1 | EXCHANGE OUT DISTR |:EX10001|90 |782 | |2 | NESTED-LOOP JOIN | |90 |757 | |3 | EXCHANGE IN DISTR | |100 |94 | |4 | EXCHANGE OUT DISTR (PKEY)|:EX10000|100 |88 | |5 | TABLE SCAN |t4 |100 |78 | |6 | PX PARTITION ITERATOR | |1 |29 | |7 | TABLE GET |t1 |1 |29 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t4.c1)]), filter(nil) 1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t4.c1)]), filter(nil), dop=1 2 - output([t4.c1], [t1.c1], [t1.c2]), filter(nil), conds(nil), nl_params_([t4.c1]) 3 - output([t4.c1], [PARTITION_ID]), filter(nil) 4 - (#keys=1, [t4.c1]), output([t4.c1], [PARTITION_ID]), filter(nil), is_single, dop=1 5 - output([t4.c1]), filter(nil), access([t4.c1]), partitions(p0) 6 - output([t1.c1], [t1.c2]), filter(nil) 7 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$260306CE" ("opt"."t4"@"YZ" "opt"."t1"@"SEL$1")) USE_NL(@"SEL$260306CE" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$260306CE" "opt"."t1"@"SEL$1" PARTITION NONE) FULL(@"SEL$260306CE" "opt"."t4"@"YZ") FULL(@"SEL$260306CE" "opt"."t1"@"SEL$1") MERGE(@"YZ" > "SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.t4"@"SEL$1" "opt.t1"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) NO_USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t1"@"SEL$1" )) FULL(@"SEL$1" "opt"."t4"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 88(end) ************** *************** Case 89 *************** SQL: select /*+ leading(@SEL$1 t4@YZ t1@SEL$1) use_bnl(@SEL$1 t1@SEL$1)*/ * from t1 , (select/*+qb_name(yz)*/ c1 from t4) t where t.c1 = t1.c1; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |PX COORDINATOR | |90 |660 | |1 | EXCHANGE OUT DISTR |:EX10001|90 |649 | |2 | HASH JOIN | |90 |624 | |3 | EXCHANGE IN DISTR | |100 |94 | |4 | EXCHANGE OUT DISTR (PKEY)|:EX10000|100 |88 | |5 | TABLE SCAN |t4 |100 |78 | |6 | PX PARTITION ITERATOR | |500 |387 | |7 | TABLE SCAN |t1 |500 |387 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t4.c1)]), filter(nil) 1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t4.c1)]), filter(nil), dop=1 2 - output([t4.c1], [t1.c1], [t1.c2]), filter(nil), equal_conds([t4.c1 = t1.c1]), other_conds(nil) 3 - output([t4.c1]), filter(nil) 4 - (#keys=1, [t4.c1]), output([t4.c1]), filter(nil), is_single, dop=1 5 - output([t4.c1]), filter(nil), access([t4.c1]), partitions(p0) 6 - output([t1.c1], [t1.c2]), filter(nil) 7 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$260306CE" ("opt"."t4"@"YZ" "opt"."t1"@"SEL$1")) USE_HASH(@"SEL$260306CE" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$260306CE" "opt"."t1"@"SEL$1" PARTITION NONE) FULL(@"SEL$260306CE" "opt"."t4"@"YZ") FULL(@"SEL$260306CE" "opt"."t1"@"SEL$1") MERGE(@"YZ" > "SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.t4"@"SEL$1" "opt.t1"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) FULL(@"SEL$1" "opt"."t4"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 89(end) ************** *************** Case 90 *************** SQL: select /*+ leading(@SEL$1 t4@YZ t1@SEL$1) */ * from t1 , (select/*+qb_name(yz) use_merge(@SEL$1 t1@SEL$1)*/ c1 from t4) t where t.c1 = t1.c1; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |PX COORDINATOR | |90 |655 | |1 | EXCHANGE OUT DISTR |:EX10001|90 |643 | |2 | MERGE JOIN | |90 |619 | |3 | EXCHANGE IN DISTR | |100 |94 | |4 | EXCHANGE OUT DISTR (PKEY)|:EX10000|100 |88 | |5 | TABLE SCAN |t4 |100 |78 | |6 | SORT | |500 |490 | |7 | PX PARTITION ITERATOR | |500 |387 | |8 | TABLE SCAN |t1 |500 |387 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t4.c1)]), filter(nil) 1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t4.c1)]), filter(nil), dop=1 2 - output([t4.c1], [t1.c1], [t1.c2]), filter(nil), equal_conds([t4.c1 = t1.c1]), other_conds(nil) 3 - output([t4.c1]), filter(nil) 4 - (#keys=1, [t4.c1]), output([t4.c1]), filter(nil), is_single, dop=1 5 - output([t4.c1]), filter(nil), access([t4.c1]), partitions(p0) 6 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort 7 - output([t1.c1], [t1.c2]), filter(nil) 8 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$260306CE" ("opt"."t4"@"YZ" "opt"."t1"@"SEL$1")) USE_MERGE(@"SEL$260306CE" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$260306CE" "opt"."t1"@"SEL$1" PARTITION NONE) FULL(@"SEL$260306CE" "opt"."t4"@"YZ") FULL(@"SEL$260306CE" "opt"."t1"@"SEL$1") MERGE(@"YZ" > "SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.t4"@"SEL$1" "opt.t1"@"SEL$1" )) USE_MERGE(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) FULL(@"SEL$1" "opt"."t4"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 90(end) ************** *************** Case 91 *************** SQL: select c1 from t1 union select /*+index(@SEL$1 t1 idx_t1_c2)*/ c1 from t2; =============================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| --------------------------------------------------------------- |0 |PX COORDINATOR | |800 |1152| |1 | EXCHANGE OUT DISTR |:EX10001 |800 |1108| |2 | HASH UNION DISTINCT | |800 |1025| |3 | PX PARTITION ITERATOR | |500 |387 | |4 | TABLE SCAN |t1(idx_t1_c2)|500 |387 | |5 | EXCHANGE IN DISTR | |300 |280 | |6 | EXCHANGE OUT DISTR (PKEY)|:EX10000 |300 |263 | |7 | PX PARTITION ITERATOR | |300 |233 | |8 | TABLE SCAN |t2 |300 |233 | =============================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(UNION([1]))]), filter(nil) 1 - output([INTERNAL_FUNCTION(UNION([1]))]), filter(nil), dop=1 2 - output([UNION([1])]), filter(nil) 3 - output([t1.c1]), filter(nil) 4 - output([t1.c1]), filter(nil), access([t1.c1]), partitions(p[0-4]) 5 - output([t2.c1]), filter(nil) 6 - (#keys=1, [t2.c1]), output([t2.c1]), filter(nil), dop=1 7 - output([t2.c1]), filter(nil) 8 - output([t2.c1]), filter(nil), access([t2.c1]), partitions(p[0-2]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD USE_HASH_SET(@"SET$1") PQ_SET(@"SET$1" NONE PARTITION) INDEX(@"SEL$1" "opt"."t1"@"SEL$1" "idx_t1_c2") FULL(@"SEL$2" "opt"."t2"@"SEL$2") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= INDEX(@"SEL$1" "opt"."t1"@"SEL$1" "idx_t1_c2") FULL(@"SEL$2" "opt"."t2"@"SEL$2") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 91(end) ************** *************** Case 92 *************** SQL: select t1.c1 from t1, t2 where t1.c1 = t2.c1 union select/*+leading(@SEL$1 t1 t2) use_merge(@SEL1 t2@SEL$1)*/ c1 from t2; =========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ----------------------------------------------------------- |0 |PX COORDINATOR | |600 |1562| |1 | EXCHANGE OUT DISTR |:EX10001|600 |1506| |2 | HASH UNION DISTINCT | |600 |1393| |3 | HASH JOIN | |300 |891 | |4 | EXCHANGE IN DISTR | |500 |466 | |5 | EXCHANGE OUT DISTR (PKEY)|:EX10000|500 |439 | |6 | PX PARTITION ITERATOR | |500 |387 | |7 | TABLE SCAN |t1 |500 |387 | |8 | PX PARTITION ITERATOR | |300 |233 | |9 | TABLE SCAN |t2 |300 |233 | |10| PX PARTITION ITERATOR | |300 |233 | |11| TABLE SCAN |t2 |300 |233 | =========================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(UNION([1]))]), filter(nil) 1 - output([INTERNAL_FUNCTION(UNION([1]))]), filter(nil), dop=1 2 - output([UNION([1])]), filter(nil) 3 - output([t1.c1]), filter(nil), equal_conds([t1.c1 = t2.c1]), other_conds(nil) 4 - output([t1.c1]), filter(nil) 5 - (#keys=1, [t1.c1]), output([t1.c1]), filter(nil), dop=1 6 - output([t1.c1]), filter(nil) 7 - output([t1.c1]), filter(nil), access([t1.c1]), partitions(p[0-4]) 8 - output([t2.c1]), filter(nil) 9 - output([t2.c1]), filter(nil), access([t2.c1]), partitions(p[0-2]) 10 - output([t2.c1]), filter(nil) 11 - output([t2.c1]), filter(nil), access([t2.c1]), partitions(p[0-2]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD USE_HASH_SET(@"SET$1") PQ_SET(@"SET$1" NONE) LEADING(@"SEL$1" ("opt"."t1"@"SEL$1" "opt"."t2"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."t2"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t2"@"SEL$1" PARTITION NONE) FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$2" "opt"."t2"@"SEL$2") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "opt.t2"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t2"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t2"@"SEL$1" ) PARTITION NONE) FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$2" "opt"."t2"@"SEL$2") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 92(end) ************** *************** Case 93 *************** SQL: select/*+leading(@SEL$1 t2 t1)*/ t1.c1 from t1, t2 where t1.c1 = t2.c1 union select/*+leading(@SEL$1 t1 t2) use_merge(@SEL1 t2@SEL$1)*/ c1 from t2; =========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ----------------------------------------------------------- |0 |PX COORDINATOR | |600 |1561| |1 | EXCHANGE OUT DISTR |:EX10001|600 |1505| |2 | HASH UNION DISTINCT | |600 |1393| |3 | HASH JOIN | |300 |890 | |4 | PX PARTITION ITERATOR | |300 |233 | |5 | TABLE SCAN |t2 |300 |233 | |6 | EXCHANGE IN DISTR | |500 |466 | |7 | EXCHANGE OUT DISTR (PKEY)|:EX10000|500 |439 | |8 | PX PARTITION ITERATOR | |500 |387 | |9 | TABLE SCAN |t1 |500 |387 | |10| PX PARTITION ITERATOR | |300 |233 | |11| TABLE SCAN |t2 |300 |233 | =========================================================== Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(UNION([1]))]), filter(nil) 1 - output([INTERNAL_FUNCTION(UNION([1]))]), filter(nil), dop=1 2 - output([UNION([1])]), filter(nil) 3 - output([t1.c1]), filter(nil), equal_conds([t1.c1 = t2.c1]), other_conds(nil) 4 - output([t2.c1]), filter(nil) 5 - output([t2.c1]), filter(nil), access([t2.c1]), partitions(p[0-2]) 6 - output([t1.c1]), filter(nil) 7 - (#keys=1, [t1.c1]), output([t1.c1]), filter(nil), dop=1 8 - output([t1.c1]), filter(nil) 9 - output([t1.c1]), filter(nil), access([t1.c1]), partitions(p[0-4]) 10 - output([t2.c1]), filter(nil) 11 - output([t2.c1]), filter(nil), access([t2.c1]), partitions(p[0-2]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD USE_HASH_SET(@"SET$1") PQ_SET(@"SET$1" NONE) LEADING(@"SEL$1" ("opt"."t2"@"SEL$1" "opt"."t1"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t1"@"SEL$1" NONE PARTITION) FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$2" "opt"."t2"@"SEL$2") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.t2"@"SEL$1" "opt.t1"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) NONE PARTITION) FULL(@"SEL$1" "opt"."t2"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$2" "opt"."t2"@"SEL$2") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 93(end) ************** *************** Case 94 *************** SQL: (select /*+ leading(@SEL$1 t4@YZ t1@SEL$1) */ t1.c1 from t1 , (select/*+qb_name(yz) use_merge(@SEL$1 t1@SEL$1)*/ c1 from t4) t where t.c1 = t1.c1) union select c1 from t3; ============================================================= |ID|OPERATOR |NAME |EST. ROWS|COST| ------------------------------------------------------------- |0 |PX COORDINATOR | |290 |1007| |1 | EXCHANGE OUT DISTR |:EX10002|290 |980 | |2 | HASH UNION DISTINCT | |290 |925 | |3 | EXCHANGE IN DISTR | |90 |640 | |4 | EXCHANGE OUT DISTR (PKEY) |:EX10001|90 |632 | |5 | MERGE JOIN | |90 |615 | |6 | EXCHANGE IN DISTR | |100 |94 | |7 | EXCHANGE OUT DISTR (PKEY)|:EX10000|100 |88 | |8 | TABLE SCAN |t4 |100 |78 | |9 | SORT | |500 |488 | |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(UNION([1]))]), filter(nil) 1 - output([INTERNAL_FUNCTION(UNION([1]))]), filter(nil), dop=1 2 - output([UNION([1])]), filter(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), equal_conds([t4.c1 = t1.c1]), other_conds(nil) 6 - output([t4.c1]), filter(nil) 7 - (#keys=1, [t4.c1]), output([t4.c1]), filter(nil), is_single, dop=1 8 - output([t4.c1]), filter(nil), access([t4.c1]), partitions(p0) 9 - output([t1.c1]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort 10 - output([t1.c1]), filter(nil) 11 - output([t1.c1]), filter(nil), access([t1.c1]), partitions(p[0-4]) 12 - output([t3.c1]), filter(nil) 13 - output([t3.c1]), filter(nil), access([t3.c1]), partitions(p[0-1]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD USE_HASH_SET(@"SET$1") PQ_SET(@"SET$1" PARTITION NONE) LEADING(@"SEL$260306CE" ("opt"."t4"@"YZ" "opt"."t1"@"SEL$1")) USE_MERGE(@"SEL$260306CE" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$260306CE" "opt"."t1"@"SEL$1" PARTITION NONE) FULL(@"SEL$260306CE" "opt"."t4"@"YZ") FULL(@"SEL$260306CE" "opt"."t1"@"SEL$1") FULL(@"SEL$2" "opt"."t3"@"SEL$2") MERGE(@"YZ" > "SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= FULL(@"SEL$3" "opt"."t3"@"SEL$3") LEADING(@"SEL$1" ("opt.t4"@"SEL$1" "opt.t1"@"SEL$1" )) USE_MERGE(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) FULL(@"SEL$1" "opt"."t4"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 94(end) ************** *************** Case 95 *************** SQL: (select t1.c1 from t1 , (select/*+qb_name(yz)*/ c1 from t4) t where t.c1 = t1.c1) union select/*+leading(@SEL$1 t4@YZ t1@SEL$1) use_merge(@SEL$1 t1@SEL$1)*/ c1 from t3; ============================================================= |ID|OPERATOR |NAME |EST. ROWS|COST| ------------------------------------------------------------- |0 |PX COORDINATOR | |290 |1007| |1 | EXCHANGE OUT DISTR |:EX10002|290 |980 | |2 | HASH UNION DISTINCT | |290 |925 | |3 | EXCHANGE IN DISTR | |90 |640 | |4 | EXCHANGE OUT DISTR (PKEY) |:EX10001|90 |632 | |5 | MERGE JOIN | |90 |615 | |6 | EXCHANGE IN DISTR | |100 |94 | |7 | EXCHANGE OUT DISTR (PKEY)|:EX10000|100 |88 | |8 | TABLE SCAN |t4 |100 |78 | |9 | SORT | |500 |488 | |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(UNION([1]))]), filter(nil) 1 - output([INTERNAL_FUNCTION(UNION([1]))]), filter(nil), dop=1 2 - output([UNION([1])]), filter(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), equal_conds([t4.c1 = t1.c1]), other_conds(nil) 6 - output([t4.c1]), filter(nil) 7 - (#keys=1, [t4.c1]), output([t4.c1]), filter(nil), is_single, dop=1 8 - output([t4.c1]), filter(nil), access([t4.c1]), partitions(p0) 9 - output([t1.c1]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort 10 - output([t1.c1]), filter(nil) 11 - output([t1.c1]), filter(nil), access([t1.c1]), partitions(p[0-4]) 12 - output([t3.c1]), filter(nil) 13 - output([t3.c1]), filter(nil), access([t3.c1]), partitions(p[0-1]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD USE_HASH_SET(@"SET$1") PQ_SET(@"SET$1" PARTITION NONE) LEADING(@"SEL$260306CE" ("opt"."t4"@"YZ" "opt"."t1"@"SEL$1")) USE_MERGE(@"SEL$260306CE" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$260306CE" "opt"."t1"@"SEL$1" PARTITION NONE) FULL(@"SEL$260306CE" "opt"."t4"@"YZ") FULL(@"SEL$260306CE" "opt"."t1"@"SEL$1") FULL(@"SEL$2" "opt"."t3"@"SEL$2") MERGE(@"YZ" > "SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= FULL(@"SEL$3" "opt"."t3"@"SEL$3") LEADING(@"SEL$1" ("opt.t4"@"SEL$1" "opt.t1"@"SEL$1" )) USE_MERGE(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) FULL(@"SEL$1" "opt"."t4"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 95(end) ************** *************** Case 96 *************** SQL: select/*+index(@SEL$1 t4 idx_t4_c2) */t1.c1 from t1 where t1.c1 in (select t4.c1 from t4 group by t4.c2); ================================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ------------------------------------------------------------------ |0 |PX COORDINATOR | |7 |132 | |1 | EXCHANGE OUT DISTR |:EX10001 |7 |131 | |2 | NESTED-LOOP JOIN | |7 |130 | |3 | EXCHANGE IN DISTR | |7 |87 | |4 | EXCHANGE OUT DISTR (PKEY)|:EX10000 |7 |86 | |5 | SUBPLAN SCAN |VIEW2 |7 |86 | |6 | MERGE DISTINCT | |7 |86 | |7 | SORT | |10 |85 | |8 | MERGE GROUP BY | |10 |82 | |9 | TABLE SCAN |t4(idx_t4_c2_c3)|100 |78 | |10| PX PARTITION ITERATOR | |1 |29 | |11| 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_([VIEW2.VIEW1.c1]) 3 - output([PARTITION_ID], [VIEW2.VIEW1.c1]), filter(nil) 4 - (#keys=1, [VIEW2.VIEW1.c1]), output([PARTITION_ID], [VIEW2.VIEW1.c1]), filter(nil), is_single, dop=1 5 - output([VIEW2.VIEW1.c1]), filter(nil), access([VIEW2.VIEW1.c1]) 6 - output([t4.c1]), filter(nil), distinct([t4.c1]) 7 - output([t4.c1]), filter(nil), sort_keys([t4.c1, ASC]) 8 - output([t4.c1]), filter(nil), group([t4.c2]), agg_func(nil) 9 - output([t4.c1], [t4.c2]), filter(nil), access([t4.c1], [t4.c2]), partitions(p0) 10 - output([t1.c1]), filter(nil) 11 - output([t1.c1]), filter(nil), access([t1.c1]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$E5385516" ("VIEW2"@"SEL$6FCAE2AA" "opt"."t1"@"SEL$1")) USE_NL(@"SEL$E5385516" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$E5385516" "opt"."t1"@"SEL$1" PARTITION NONE) INDEX(@"SEL$8A1445BC" "opt"."t4"@"SEL$2" "idx_t4_c2_c3") FULL(@"SEL$E5385516" "opt"."t1"@"SEL$1") UNNEST(@"SEL$2") SEMI_TO_INNER(@"SEL$6FCAE2AA" "VIEW1") MERGE(@"SEL$2" < "SEL$7BD09C5F") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("VIEW2"@"SEL$1" "opt.t1"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) NO_USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t1"@"SEL$1" )) NO_USE_HASH_AGGREGATION(@"SEL$2") INDEX(@"SEL$2" "opt"."t4"@"SEL$2" "idx_t4_c2") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 96(end) ************** *************** Case 97 *************** SQL: select/*+index(@SEL$2 t4 idx_t4_c2) */t1.c1 from t1 where t1.c1 in (select t4.c1 from t4 group by t4.c2); =============================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| --------------------------------------------------------------- |0 |PX COORDINATOR | |7 |132 | |1 | EXCHANGE OUT DISTR |:EX10001 |7 |131 | |2 | NESTED-LOOP JOIN | |7 |130 | |3 | EXCHANGE IN DISTR | |7 |87 | |4 | EXCHANGE OUT DISTR (PKEY)|:EX10000 |7 |86 | |5 | SUBPLAN SCAN |VIEW2 |7 |86 | |6 | MERGE DISTINCT | |7 |86 | |7 | SORT | |10 |85 | |8 | MERGE GROUP BY | |10 |82 | |9 | TABLE SCAN |t4(idx_t4_c2)|100 |78 | |10| PX PARTITION ITERATOR | |1 |29 | |11| 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_([VIEW2.VIEW1.c1]) 3 - output([PARTITION_ID], [VIEW2.VIEW1.c1]), filter(nil) 4 - (#keys=1, [VIEW2.VIEW1.c1]), output([PARTITION_ID], [VIEW2.VIEW1.c1]), filter(nil), is_single, dop=1 5 - output([VIEW2.VIEW1.c1]), filter(nil), access([VIEW2.VIEW1.c1]) 6 - output([t4.c1]), filter(nil), distinct([t4.c1]) 7 - output([t4.c1]), filter(nil), sort_keys([t4.c1, ASC]) 8 - output([t4.c1]), filter(nil), group([t4.c2]), agg_func(nil) 9 - output([t4.c1], [t4.c2]), filter(nil), access([t4.c1], [t4.c2]), partitions(p0) 10 - output([t1.c1]), filter(nil) 11 - output([t1.c1]), filter(nil), access([t1.c1]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$E5385516" ("VIEW2"@"SEL$6FCAE2AA" "opt"."t1"@"SEL$1")) USE_NL(@"SEL$E5385516" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$E5385516" "opt"."t1"@"SEL$1" PARTITION NONE) INDEX(@"SEL$8A1445BC" "opt"."t4"@"SEL$2" "idx_t4_c2") FULL(@"SEL$E5385516" "opt"."t1"@"SEL$1") UNNEST(@"SEL$2") SEMI_TO_INNER(@"SEL$6FCAE2AA" "VIEW1") MERGE(@"SEL$2" < "SEL$7BD09C5F") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("VIEW2"@"SEL$1" "opt.t1"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) NO_USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t1"@"SEL$1" )) NO_USE_HASH_AGGREGATION(@"SEL$2") INDEX(@"SEL$2" "opt"."t4"@"SEL$2" "idx_t4_c2") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 97(end) ************** *************** Case 98 *************** SQL: select/*+index(@SEL$2 t4 idx_t4_c2) */t1.c1 from t1 where t1.c1 in (select/*+index(t4 idx_t4_c3)*/ t4.c1 from t4, (select t5.c1 from t5) t_a where t4.c2 > 1 and t4.c2 < 3 and t_a.c1 = t4.c1 group by t4.c2); =================================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ------------------------------------------------------------------- |0 |PX COORDINATOR | |7 |563 | |1 | EXCHANGE OUT DISTR |:EX10002 |7 |563 | |2 | NESTED-LOOP JOIN | |7 |562 | |3 | EXCHANGE IN DISTR | |7 |518 | |4 | EXCHANGE OUT DISTR (PKEY) |:EX10001 |7 |518 | |5 | SUBPLAN SCAN |VIEW2 |7 |517 | |6 | MERGE DISTINCT | |7 |517 | |7 | SORT | |10 |517 | |8 | HASH GROUP BY | |10 |514 | |9 | HASH JOIN | |244 |454 | |10| TABLE SCAN |t4(idx_t4_c2)|100 |78 | |11| EXCHANGE IN DISTR | |300 |280 | |12| EXCHANGE OUT DISTR |:EX10000 |300 |263 | |13| PX PARTITION ITERATOR| |300 |233 | |14| TABLE SCAN |t5 |300 |233 | |15| PX PARTITION ITERATOR | |1 |29 | |16| 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_([VIEW2.VIEW1.c1]) 3 - output([PARTITION_ID], [VIEW2.VIEW1.c1]), filter(nil) 4 - (#keys=1, [VIEW2.VIEW1.c1]), output([PARTITION_ID], [VIEW2.VIEW1.c1]), filter(nil), is_single, dop=1 5 - output([VIEW2.VIEW1.c1]), filter(nil), access([VIEW2.VIEW1.c1]) 6 - output([t4.c1]), filter(nil), distinct([t4.c1]) 7 - output([t4.c1]), filter(nil), sort_keys([t4.c1, ASC]) 8 - output([t4.c1]), filter(nil), group([t4.c2]), agg_func(nil) 9 - output([t4.c1], [t4.c2]), filter(nil), equal_conds([t5.c1 = t4.c1]), other_conds(nil) 10 - output([t4.c1], [t4.c2]), filter(nil), access([t4.c1], [t4.c2]), partitions(p0) 11 - output([t5.c1]), filter(nil) 12 - output([t5.c1]), filter(nil), dop=1 13 - output([t5.c1]), filter(nil) 14 - output([t5.c1]), filter(nil), access([t5.c1]), partitions(p[0-2]) 15 - output([t1.c1]), filter(nil) 16 - output([t1.c1]), filter(nil), access([t1.c1]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$4E43146C" ("VIEW2"@"SEL$4E6CEC69" "opt"."t1"@"SEL$1")) USE_NL(@"SEL$4E43146C" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$4E43146C" "opt"."t1"@"SEL$1" PARTITION NONE) USE_HASH_AGGREGATION(@"SEL$65E1ED7C") LEADING(@"SEL$65E1ED7C" ("opt"."t4"@"SEL$2" "opt"."t5"@"SEL$3")) USE_HASH(@"SEL$65E1ED7C" "opt"."t5"@"SEL$3") PQ_DISTRIBUTE(@"SEL$65E1ED7C" "opt"."t5"@"SEL$3" LOCAL LOCAL) INDEX(@"SEL$65E1ED7C" "opt"."t4"@"SEL$2" "idx_t4_c2") FULL(@"SEL$65E1ED7C" "opt"."t5"@"SEL$3") FULL(@"SEL$4E43146C" "opt"."t1"@"SEL$1") MERGE(@"SEL$3" > "SEL$2") UNNEST(@"SEL$B9DE6649") SEMI_TO_INNER(@"SEL$4E6CEC69" "VIEW1") MERGE(@"SEL$B9DE6649" < "SEL$D0ABDD25") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("VIEW2"@"SEL$1" "opt.t1"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) NO_USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t1"@"SEL$1" )) USE_HASH_AGGREGATION(@"SEL$2") LEADING(@"SEL$2" ("opt.t4"@"SEL$2" "opt.t5"@"SEL$2" )) USE_HASH(@"SEL$2" ("opt.t5"@"SEL$2" )) PQ_DISTRIBUTE(@"SEL$2" ("opt.t5"@"SEL$2" ) LOCAL LOCAL) INDEX(@"SEL$2" "opt"."t4"@"SEL$2" "idx_t4_c2") FULL(@"SEL$2" "opt"."t5"@"SEL$2") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 98(end) ************** *************** Case 99 *************** SQL: select/*+index(@SEL$2 t4 idx_t4_c2) */t1.c1 from t1 where t1.c1 in (select/*+index(t4 idx_t4_c3)*/ t4.c1 from t4, (select t5.c1 from t5) t_a where t4.c3 > 1 and t4.c3 < 3 and t_a.c1 = t4.c1 group by t4.c2); =================================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ------------------------------------------------------------------- |0 |PX COORDINATOR | |7 |564 | |1 | EXCHANGE OUT DISTR |:EX10002 |7 |563 | |2 | NESTED-LOOP JOIN | |7 |562 | |3 | EXCHANGE IN DISTR | |7 |519 | |4 | EXCHANGE OUT DISTR (PKEY) |:EX10001 |7 |518 | |5 | SUBPLAN SCAN |VIEW2 |7 |518 | |6 | MERGE DISTINCT | |7 |518 | |7 | SORT | |10 |517 | |8 | HASH GROUP BY | |10 |514 | |9 | HASH JOIN | |244 |454 | |10| EXCHANGE IN DISTR | |300 |280 | |11| EXCHANGE OUT DISTR |:EX10000 |300 |263 | |12| PX PARTITION ITERATOR| |300 |233 | |13| TABLE SCAN |t5 |300 |233 | |14| TABLE SCAN |t4(idx_t4_c3)|100 |78 | |15| PX PARTITION ITERATOR | |1 |29 | |16| 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_([VIEW2.VIEW1.c1]) 3 - output([PARTITION_ID], [VIEW2.VIEW1.c1]), filter(nil) 4 - (#keys=1, [VIEW2.VIEW1.c1]), output([PARTITION_ID], [VIEW2.VIEW1.c1]), filter(nil), is_single, dop=1 5 - output([VIEW2.VIEW1.c1]), filter(nil), access([VIEW2.VIEW1.c1]) 6 - output([t4.c1]), filter(nil), distinct([t4.c1]) 7 - output([t4.c1]), filter(nil), sort_keys([t4.c1, ASC]) 8 - output([t4.c1]), filter(nil), group([t4.c2]), agg_func(nil) 9 - output([t4.c1], [t4.c2]), filter(nil), equal_conds([t5.c1 = t4.c1]), other_conds(nil) 10 - output([t5.c1]), filter(nil) 11 - output([t5.c1]), filter(nil), dop=1 12 - output([t5.c1]), filter(nil) 13 - output([t5.c1]), filter(nil), access([t5.c1]), partitions(p[0-2]) 14 - output([t4.c1], [t4.c2]), filter(nil), access([t4.c1], [t4.c2]), partitions(p0) 15 - output([t1.c1]), filter(nil) 16 - output([t1.c1]), filter(nil), access([t1.c1]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$4E43146C" ("VIEW2"@"SEL$4E6CEC69" "opt"."t1"@"SEL$1")) USE_NL(@"SEL$4E43146C" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$4E43146C" "opt"."t1"@"SEL$1" PARTITION NONE) USE_HASH_AGGREGATION(@"SEL$65E1ED7C") LEADING(@"SEL$65E1ED7C" ("opt"."t5"@"SEL$3" "opt"."t4"@"SEL$2")) USE_HASH(@"SEL$65E1ED7C" "opt"."t4"@"SEL$2") PQ_DISTRIBUTE(@"SEL$65E1ED7C" "opt"."t4"@"SEL$2" LOCAL LOCAL) FULL(@"SEL$65E1ED7C" "opt"."t5"@"SEL$3") INDEX(@"SEL$65E1ED7C" "opt"."t4"@"SEL$2" "idx_t4_c3") FULL(@"SEL$4E43146C" "opt"."t1"@"SEL$1") MERGE(@"SEL$3" > "SEL$2") UNNEST(@"SEL$B9DE6649") SEMI_TO_INNER(@"SEL$4E6CEC69" "VIEW1") MERGE(@"SEL$B9DE6649" < "SEL$D0ABDD25") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("VIEW2"@"SEL$1" "opt.t1"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) NO_USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t1"@"SEL$1" )) USE_HASH_AGGREGATION(@"SEL$2") LEADING(@"SEL$2" ("opt.t4"@"SEL$2" "opt.t5"@"SEL$2" )) USE_HASH(@"SEL$2" ("opt.t5"@"SEL$2" )) PQ_DISTRIBUTE(@"SEL$2" ("opt.t5"@"SEL$2" ) LOCAL LOCAL) INDEX(@"SEL$2" "opt"."t4"@"SEL$2" "idx_t4_c3") FULL(@"SEL$2" "opt"."t5"@"SEL$2") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 99(end) ************** *************** Case 100 *************** SQL: select/*+index(@SEL$2 t4 idx_t4_c2) leading(@SEL$2 t5@SEL$3 t4@SEL$2)*/t1.c1 from t1 where t1.c1 in (select t4.c1 from t4, (select t5.c1 from t5) t_a where t_a.c1 = t4.c1 group by t4.c2); =================================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ------------------------------------------------------------------- |0 |PX COORDINATOR | |7 |564 | |1 | EXCHANGE OUT DISTR |:EX10002 |7 |563 | |2 | NESTED-LOOP JOIN | |7 |562 | |3 | EXCHANGE IN DISTR | |7 |519 | |4 | EXCHANGE OUT DISTR (PKEY) |:EX10001 |7 |518 | |5 | SUBPLAN SCAN |VIEW2 |7 |518 | |6 | MERGE DISTINCT | |7 |517 | |7 | SORT | |10 |517 | |8 | HASH GROUP BY | |10 |514 | |9 | HASH JOIN | |244 |454 | |10| EXCHANGE IN DISTR | |300 |280 | |11| EXCHANGE OUT DISTR |:EX10000 |300 |263 | |12| PX PARTITION ITERATOR| |300 |233 | |13| TABLE SCAN |t5 |300 |233 | |14| TABLE SCAN |t4(idx_t4_c2)|100 |78 | |15| PX PARTITION ITERATOR | |1 |29 | |16| 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_([VIEW2.VIEW1.c1]) 3 - output([PARTITION_ID], [VIEW2.VIEW1.c1]), filter(nil) 4 - (#keys=1, [VIEW2.VIEW1.c1]), output([PARTITION_ID], [VIEW2.VIEW1.c1]), filter(nil), is_single, dop=1 5 - output([VIEW2.VIEW1.c1]), filter(nil), access([VIEW2.VIEW1.c1]) 6 - output([t4.c1]), filter(nil), distinct([t4.c1]) 7 - output([t4.c1]), filter(nil), sort_keys([t4.c1, ASC]) 8 - output([t4.c1]), filter(nil), group([t4.c2]), agg_func(nil) 9 - output([t4.c1], [t4.c2]), filter(nil), equal_conds([t5.c1 = t4.c1]), other_conds(nil) 10 - output([t5.c1]), filter(nil) 11 - output([t5.c1]), filter(nil), dop=1 12 - output([t5.c1]), filter(nil) 13 - output([t5.c1]), filter(nil), access([t5.c1]), partitions(p[0-2]) 14 - output([t4.c1], [t4.c2]), filter(nil), access([t4.c1], [t4.c2]), partitions(p0) 15 - output([t1.c1]), filter(nil) 16 - output([t1.c1]), filter(nil), access([t1.c1]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$4E43146C" ("VIEW2"@"SEL$4E6CEC69" "opt"."t1"@"SEL$1")) USE_NL(@"SEL$4E43146C" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$4E43146C" "opt"."t1"@"SEL$1" PARTITION NONE) USE_HASH_AGGREGATION(@"SEL$65E1ED7C") LEADING(@"SEL$65E1ED7C" ("opt"."t5"@"SEL$3" "opt"."t4"@"SEL$2")) USE_HASH(@"SEL$65E1ED7C" "opt"."t4"@"SEL$2") PQ_DISTRIBUTE(@"SEL$65E1ED7C" "opt"."t4"@"SEL$2" LOCAL LOCAL) FULL(@"SEL$65E1ED7C" "opt"."t5"@"SEL$3") INDEX(@"SEL$65E1ED7C" "opt"."t4"@"SEL$2" "idx_t4_c2") FULL(@"SEL$4E43146C" "opt"."t1"@"SEL$1") MERGE(@"SEL$3" > "SEL$2") UNNEST(@"SEL$B9DE6649") SEMI_TO_INNER(@"SEL$4E6CEC69" "VIEW1") MERGE(@"SEL$B9DE6649" < "SEL$D0ABDD25") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("VIEW2"@"SEL$1" "opt.t1"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) NO_USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t1"@"SEL$1" )) USE_HASH_AGGREGATION(@"SEL$2") LEADING(@"SEL$2" ("opt.t5"@"SEL$2" "opt.t4"@"SEL$2" )) USE_HASH(@"SEL$2" ("opt.t4"@"SEL$2" )) PQ_DISTRIBUTE(@"SEL$2" ("opt.t4"@"SEL$2" ) LOCAL LOCAL) FULL(@"SEL$2" "opt"."t5"@"SEL$2") INDEX(@"SEL$2" "opt"."t4"@"SEL$2" "idx_t4_c2") FULL(@"SEL$1" "opt"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 100(end) ************** *************** Case 101 *************** SQL: select * from hint.t1 where a in (select * from (select max(t1.a) from hint.t1, hint.t2) as tt); ============================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| -------------------------------------------------------------- |0 |NESTED-LOOP JOIN | |1 |3095| |1 | SUBPLAN SCAN |VIEW1 |1 |3090| |2 | SCALAR GROUP BY | |1 |3090| |3 | NESTED-LOOP JOIN CARTESIAN| |10000 |2736| |4 | TABLE SCAN |t1(idx_t1_a)|100 |78 | |5 | MATERIAL | |100 |78 | |6 | TABLE SCAN |t2 |100 |78 | |7 | TABLE GET |t1 |1 |5 | ============================================================== Outputs & filters: ------------------------------------- 0 - output([t1.a], [t1.b]), filter(nil), conds(nil), nl_params_([VIEW1.max(t1.a)]) 1 - output([VIEW1.max(t1.a)]), filter(nil), access([VIEW1.max(t1.a)]) 2 - output([T_FUN_MAX(t1.a)]), filter(nil), group(nil), agg_func([T_FUN_MAX(t1.a)]) 3 - output([t1.a]), filter(nil), conds(nil), nl_params_(nil) 4 - output([t1.a]), filter(nil), access([t1.a]), partitions(p0) 5 - output(nil), filter(nil) 6 - output(nil), filter(nil), access([t2.a]), partitions(p0) 7 - output([t1.a], [t1.b]), filter(nil), access([t1.a], [t1.b]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$E5385516" ("VIEW1"@"SEL$1" "hint"."t1"@"SEL$1")) USE_NL(@"SEL$E5385516" "hint"."t1"@"SEL$1") LEADING(@"SEL$1AE1580B" ("hint"."t1"@"SEL$3" "hint"."t2"@"SEL$3")) USE_NL(@"SEL$1AE1580B" "hint"."t2"@"SEL$3") USE_NL_MATERIALIZATION(@"SEL$1AE1580B" "hint"."t2"@"SEL$3") INDEX(@"SEL$1AE1580B" "hint"."t1"@"SEL$3" "idx_t1_a") FULL(@"SEL$1AE1580B" "hint"."t2"@"SEL$3") FULL(@"SEL$E5385516" "hint"."t1"@"SEL$1") UNNEST(@"SEL$2") SEMI_TO_INNER(@"SEL$6FCAE2AA" "VIEW1") MERGE(@"SEL$3" < "SEL$2") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("VIEW1"@"SEL$1" "hint.t1"@"SEL$1" )) USE_NL(@"SEL$1" ("hint.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.t1"@"SEL$1" ) LOCAL LOCAL) NO_USE_NL_MATERIALIZATION(@"SEL$1" ("hint.t1"@"SEL$1" )) LEADING(@"SEL$3" ("hint.t1"@"SEL$3" "hint.t2"@"SEL$3" )) USE_NL(@"SEL$3" ("hint.t2"@"SEL$3" )) PQ_DISTRIBUTE(@"SEL$3" ("hint.t2"@"SEL$3" ) LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$3" ("hint.t2"@"SEL$3" )) INDEX(@"SEL$3" "hint"."t1"@"SEL$3" "idx_t1_a") FULL(@"SEL$3" "hint"."t2"@"SEL$3") FULL(@"SEL$1" "hint"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 101(end) ************** *************** Case 102 *************** SQL: select /*+ BEGIN_OUTLINE_DATA USE_NL(@"SEL$3" "hint.t2"@"SEL$3") LEADING(@"SEL$3" "hint.t2"@"SEL$3" "hint.t1"@"SEL$3") END_OUTLINE_DATA */* from hint.t1 where a in (select * from (select max(t1.a) from hint.t1, hint.t2) as tt); ============================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| -------------------------------------------------------------- |0 |NESTED-LOOP JOIN | |1 |3095| |1 | SUBPLAN SCAN |VIEW1 |1 |3090| |2 | SCALAR GROUP BY | |1 |3090| |3 | NESTED-LOOP JOIN CARTESIAN| |10000 |2736| |4 | TABLE SCAN |t2 |100 |78 | |5 | MATERIAL | |100 |78 | |6 | TABLE SCAN |t1(idx_t1_a)|100 |78 | |7 | TABLE GET |t1 |1 |5 | ============================================================== Outputs & filters: ------------------------------------- 0 - output([t1.a], [t1.b]), filter(nil), conds(nil), nl_params_([VIEW1.max(t1.a)]) 1 - output([VIEW1.max(t1.a)]), filter(nil), access([VIEW1.max(t1.a)]) 2 - output([T_FUN_MAX(t1.a)]), filter(nil), group(nil), agg_func([T_FUN_MAX(t1.a)]) 3 - output([t1.a]), filter(nil), conds(nil), nl_params_(nil) 4 - output(nil), filter(nil), access([t2.a]), partitions(p0) 5 - output([t1.a]), filter(nil) 6 - output([t1.a]), filter(nil), access([t1.a]), partitions(p0) 7 - output([t1.a], [t1.b]), filter(nil), access([t1.a], [t1.b]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$E5385516" ("VIEW1"@"SEL$1" "hint"."t1"@"SEL$1")) USE_NL(@"SEL$E5385516" "hint"."t1"@"SEL$1") LEADING(@"SEL$1AE1580B" ("hint"."t2"@"SEL$3" "hint"."t1"@"SEL$3")) USE_NL(@"SEL$1AE1580B" "hint"."t1"@"SEL$3") USE_NL_MATERIALIZATION(@"SEL$1AE1580B" "hint"."t1"@"SEL$3") FULL(@"SEL$1AE1580B" "hint"."t2"@"SEL$3") INDEX(@"SEL$1AE1580B" "hint"."t1"@"SEL$3" "idx_t1_a") FULL(@"SEL$E5385516" "hint"."t1"@"SEL$1") UNNEST(@"SEL$2") SEMI_TO_INNER(@"SEL$6FCAE2AA" "VIEW1") MERGE(@"SEL$3" < "SEL$2") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("VIEW1"@"SEL$1" "hint.t1"@"SEL$1" )) USE_NL(@"SEL$1" ("hint.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("hint.t1"@"SEL$1" ) LOCAL LOCAL) NO_USE_NL_MATERIALIZATION(@"SEL$1" ("hint.t1"@"SEL$1" )) LEADING(@"SEL$3" ("hint.t2"@"SEL$3" "hint.t1"@"SEL$3" )) USE_NL(@"SEL$3" ("hint.t1"@"SEL$3" )) PQ_DISTRIBUTE(@"SEL$3" ("hint.t1"@"SEL$3" ) LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$3" ("hint.t1"@"SEL$3" )) FULL(@"SEL$3" "hint"."t2"@"SEL$3") INDEX(@"SEL$3" "hint"."t1"@"SEL$3" "idx_t1_a") FULL(@"SEL$1" "hint"."t1"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 102(end) ************** *************** Case 103 *************** SQL: select t1.c1 from t1, (select t2.c1 from t2, (select t3.c1 from t3) t_a where t_a.c1 = t2.c1) t_a1 where t_a1.c1 = t1.c1 and t1.c1 in (select t4.c1 from t4); ================================================================ |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------------- |0 |PX COORDINATOR | |3 |250 | |1 | EXCHANGE OUT DISTR |:EX10003|3 |249 | |2 | NESTED-LOOP JOIN | |3 |248 | |3 | EXCHANGE IN DISTR | |4 |222 | |4 | EXCHANGE OUT DISTR (PKEY) |:EX10002|4 |221 | |5 | NESTED-LOOP JOIN | |4 |220 | |6 | EXCHANGE IN DISTR | |10 |153 | |7 | EXCHANGE OUT DISTR (PKEY) |:EX10001|10 |152 | |8 | NESTED-LOOP JOIN | |10 |150 | |9 | EXCHANGE IN DISTR | |10 |84 | |10| EXCHANGE OUT DISTR (PKEY)|:EX10000|10 |83 | |11| SUBPLAN SCAN |VIEW2 |10 |82 | |12| MERGE DISTINCT | |10 |82 | |13| TABLE SCAN |t4 |100 |78 | |14| PX PARTITION ITERATOR | |1 |29 | |15| TABLE GET |t1 |1 |29 | |16| PX PARTITION ITERATOR | |1 |12 | |17| TABLE GET |t3 |1 |12 | |18| PX PARTITION ITERATOR | |1 |18 | |19| TABLE GET |t2 |1 |18 | ================================================================ 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]) 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), conds(nil), nl_params_([t1.c1]) 6 - output([t1.c1], [PARTITION_ID]), filter(nil) 7 - (#keys=1, [t1.c1]), output([t1.c1], [PARTITION_ID]), filter(nil), dop=1 8 - output([t1.c1]), filter(nil), conds(nil), nl_params_([VIEW2.VIEW1.c1]) 9 - output([PARTITION_ID], [VIEW2.VIEW1.c1]), filter(nil) 10 - (#keys=1, [VIEW2.VIEW1.c1]), output([PARTITION_ID], [VIEW2.VIEW1.c1]), filter(nil), is_single, dop=1 11 - output([VIEW2.VIEW1.c1]), filter(nil), access([VIEW2.VIEW1.c1]) 12 - output([t4.c1]), filter(nil), distinct([t4.c1]) 13 - output([t4.c1]), filter(nil), access([t4.c1]), partitions(p0) 14 - output([t1.c1]), filter(nil) 15 - output([t1.c1]), filter(nil), access([t1.c1]), partitions(p[0-4]) 16 - output(nil), filter(nil) 17 - output(nil), filter(nil), access([t3.c1]), partitions(p[0-1]) 18 - output(nil), filter(nil) 19 - output(nil), filter(nil), access([t2.c1]), partitions(p[0-2]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$9F01FF23" ((("VIEW2"@"SEL$1C11F6CF" "opt"."t1"@"SEL$1") "opt"."t3"@"SEL$3") "opt"."t2"@"SEL$2")) USE_NL(@"SEL$9F01FF23" "opt"."t2"@"SEL$2") PQ_DISTRIBUTE(@"SEL$9F01FF23" "opt"."t2"@"SEL$2" PARTITION NONE) USE_NL(@"SEL$9F01FF23" "opt"."t3"@"SEL$3") PQ_DISTRIBUTE(@"SEL$9F01FF23" "opt"."t3"@"SEL$3" PARTITION NONE) USE_NL(@"SEL$9F01FF23" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$9F01FF23" "opt"."t1"@"SEL$1" PARTITION NONE) FULL(@"SEL$A0E8BF28" "opt"."t4"@"SEL$4") FULL(@"SEL$9F01FF23" "opt"."t1"@"SEL$1") FULL(@"SEL$9F01FF23" "opt"."t3"@"SEL$3") FULL(@"SEL$9F01FF23" "opt"."t2"@"SEL$2") MERGE(@"SEL$3" > "SEL$2") MERGE(@"SEL$B9DE6649" > "SEL$1") UNNEST(@"SEL$4") SEMI_TO_INNER(@"SEL$1C11F6CF" "VIEW1") MERGE(@"SEL$4" < "SEL$01E9366A") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ((("opt.t4"@"SEL$1" "opt.t1"@"SEL$1" )"opt.t3"@"SEL$1" )"opt.t2"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t2"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t2"@"SEL$1" ) PARTITION NONE) NO_USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t2"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t3"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t3"@"SEL$1" ) PARTITION NONE) USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) FULL(@"SEL$1" "opt"."t4"@"SEL$1") FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t3"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 103(end) ************** *************** Case 104 *************** SQL: select /*+ leading(@SEL$1 t1 t4 t3 t2) index(@SEL$4 t4 idx_t4_c3)*/ t1.c1 from t1, (select t2.c1 from t2, (select t3.c1 from t3) t_a where t_a.c1 = t2.c1) t_a1 where t_a1.c1 = t1.c1 and t1.c1 in (select t4.c1 from t4); ===================================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| --------------------------------------------------------------------- |0 |PX COORDINATOR | |3 |271 | |1 | EXCHANGE OUT DISTR |:EX10003 |3 |271 | |2 | NESTED-LOOP JOIN | |3 |270 | |3 | EXCHANGE IN DISTR | |4 |243 | |4 | EXCHANGE OUT DISTR (PKEY) |:EX10002 |4 |243 | |5 | NESTED-LOOP JOIN | |4 |242 | |6 | EXCHANGE IN DISTR | |10 |175 | |7 | EXCHANGE OUT DISTR (PKEY) |:EX10001 |10 |174 | |8 | NESTED-LOOP JOIN | |10 |172 | |9 | EXCHANGE IN DISTR | |10 |106 | |10| EXCHANGE OUT DISTR (PKEY)|:EX10000 |10 |105 | |11| SUBPLAN SCAN |VIEW2 |10 |104 | |12| HASH DISTINCT | |10 |104 | |13| TABLE SCAN |t4(idx_t4_c3)|100 |78 | |14| PX PARTITION ITERATOR | |1 |29 | |15| TABLE GET |t1 |1 |29 | |16| PX PARTITION ITERATOR | |1 |12 | |17| TABLE GET |t3 |1 |12 | |18| PX PARTITION ITERATOR | |1 |18 | |19| TABLE GET |t2 |1 |18 | ===================================================================== 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]) 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), conds(nil), nl_params_([t1.c1]) 6 - output([t1.c1], [PARTITION_ID]), filter(nil) 7 - (#keys=1, [t1.c1]), output([t1.c1], [PARTITION_ID]), filter(nil), dop=1 8 - output([t1.c1]), filter(nil), conds(nil), nl_params_([VIEW2.VIEW1.c1]) 9 - output([PARTITION_ID], [VIEW2.VIEW1.c1]), filter(nil) 10 - (#keys=1, [VIEW2.VIEW1.c1]), output([PARTITION_ID], [VIEW2.VIEW1.c1]), filter(nil), is_single, dop=1 11 - output([VIEW2.VIEW1.c1]), filter(nil), access([VIEW2.VIEW1.c1]) 12 - output([t4.c1]), filter(nil), distinct([t4.c1]) 13 - output([t4.c1]), filter(nil), access([t4.c1]), partitions(p0) 14 - output([t1.c1]), filter(nil) 15 - output([t1.c1]), filter(nil), access([t1.c1]), partitions(p[0-4]) 16 - output(nil), filter(nil) 17 - output(nil), filter(nil), access([t3.c1]), partitions(p[0-1]) 18 - output(nil), filter(nil) 19 - output(nil), filter(nil), access([t2.c1]), partitions(p[0-2]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$9F01FF23" ((("VIEW2"@"SEL$1C11F6CF" "opt"."t1"@"SEL$1") "opt"."t3"@"SEL$3") "opt"."t2"@"SEL$2")) USE_NL(@"SEL$9F01FF23" "opt"."t2"@"SEL$2") PQ_DISTRIBUTE(@"SEL$9F01FF23" "opt"."t2"@"SEL$2" PARTITION NONE) USE_NL(@"SEL$9F01FF23" "opt"."t3"@"SEL$3") PQ_DISTRIBUTE(@"SEL$9F01FF23" "opt"."t3"@"SEL$3" PARTITION NONE) USE_NL(@"SEL$9F01FF23" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$9F01FF23" "opt"."t1"@"SEL$1" PARTITION NONE) USE_HASH_DISTINCT(@"SEL$A0E8BF28") INDEX(@"SEL$A0E8BF28" "opt"."t4"@"SEL$4" "idx_t4_c3") FULL(@"SEL$9F01FF23" "opt"."t1"@"SEL$1") FULL(@"SEL$9F01FF23" "opt"."t3"@"SEL$3") FULL(@"SEL$9F01FF23" "opt"."t2"@"SEL$2") MERGE(@"SEL$3" > "SEL$2") MERGE(@"SEL$B9DE6649" > "SEL$1") UNNEST(@"SEL$4") SEMI_TO_INNER(@"SEL$1C11F6CF" "VIEW1") MERGE(@"SEL$4" < "SEL$01E9366A") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ((("opt.t1"@"SEL$1" "opt.t4"@"SEL$1" )"opt.t3"@"SEL$1" )"opt.t2"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t2"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t2"@"SEL$1" ) PARTITION NONE) NO_USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t2"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t3"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t3"@"SEL$1" ) PARTITION NONE) USE_HASH(@"SEL$1" ("opt.t4"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t4"@"SEL$1" ) NONE PARTITION) FULL(@"SEL$1" "opt"."t1"@"SEL$1") INDEX(@"SEL$1" "opt"."t4"@"SEL$1" "idx_t4_c3") FULL(@"SEL$1" "opt"."t3"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 104(end) ************** *************** Case 105 *************** SQL: select /*+ leading(@SEL1 t1 t4 t3 t2) index(@SEL$4 t4 idx_t4_c3)*/ t1.c1 from t1, (select t2.c1 from t2, (select t3.c1 from t3) t_a where t_a.c1 = t2.c1) t_a1 where t_a1.c1 = t1.c1 and t1.c1 in (select t4.c1 from t4); ===================================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| --------------------------------------------------------------------- |0 |PX COORDINATOR | |3 |271 | |1 | EXCHANGE OUT DISTR |:EX10003 |3 |271 | |2 | NESTED-LOOP JOIN | |3 |270 | |3 | EXCHANGE IN DISTR | |4 |243 | |4 | EXCHANGE OUT DISTR (PKEY) |:EX10002 |4 |243 | |5 | NESTED-LOOP JOIN | |4 |242 | |6 | EXCHANGE IN DISTR | |10 |175 | |7 | EXCHANGE OUT DISTR (PKEY) |:EX10001 |10 |174 | |8 | NESTED-LOOP JOIN | |10 |172 | |9 | EXCHANGE IN DISTR | |10 |106 | |10| EXCHANGE OUT DISTR (PKEY)|:EX10000 |10 |105 | |11| SUBPLAN SCAN |VIEW2 |10 |104 | |12| HASH DISTINCT | |10 |104 | |13| TABLE SCAN |t4(idx_t4_c3)|100 |78 | |14| PX PARTITION ITERATOR | |1 |29 | |15| TABLE GET |t1 |1 |29 | |16| PX PARTITION ITERATOR | |1 |12 | |17| TABLE GET |t3 |1 |12 | |18| PX PARTITION ITERATOR | |1 |18 | |19| TABLE GET |t2 |1 |18 | ===================================================================== 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]) 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), conds(nil), nl_params_([t1.c1]) 6 - output([t1.c1], [PARTITION_ID]), filter(nil) 7 - (#keys=1, [t1.c1]), output([t1.c1], [PARTITION_ID]), filter(nil), dop=1 8 - output([t1.c1]), filter(nil), conds(nil), nl_params_([VIEW2.VIEW1.c1]) 9 - output([PARTITION_ID], [VIEW2.VIEW1.c1]), filter(nil) 10 - (#keys=1, [VIEW2.VIEW1.c1]), output([PARTITION_ID], [VIEW2.VIEW1.c1]), filter(nil), is_single, dop=1 11 - output([VIEW2.VIEW1.c1]), filter(nil), access([VIEW2.VIEW1.c1]) 12 - output([t4.c1]), filter(nil), distinct([t4.c1]) 13 - output([t4.c1]), filter(nil), access([t4.c1]), partitions(p0) 14 - output([t1.c1]), filter(nil) 15 - output([t1.c1]), filter(nil), access([t1.c1]), partitions(p[0-4]) 16 - output(nil), filter(nil) 17 - output(nil), filter(nil), access([t3.c1]), partitions(p[0-1]) 18 - output(nil), filter(nil) 19 - output(nil), filter(nil), access([t2.c1]), partitions(p[0-2]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$9F01FF23" ((("VIEW2"@"SEL$1C11F6CF" "opt"."t1"@"SEL$1") "opt"."t3"@"SEL$3") "opt"."t2"@"SEL$2")) USE_NL(@"SEL$9F01FF23" "opt"."t2"@"SEL$2") PQ_DISTRIBUTE(@"SEL$9F01FF23" "opt"."t2"@"SEL$2" PARTITION NONE) USE_NL(@"SEL$9F01FF23" "opt"."t3"@"SEL$3") PQ_DISTRIBUTE(@"SEL$9F01FF23" "opt"."t3"@"SEL$3" PARTITION NONE) USE_NL(@"SEL$9F01FF23" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$9F01FF23" "opt"."t1"@"SEL$1" PARTITION NONE) USE_HASH_DISTINCT(@"SEL$A0E8BF28") INDEX(@"SEL$A0E8BF28" "opt"."t4"@"SEL$4" "idx_t4_c3") FULL(@"SEL$9F01FF23" "opt"."t1"@"SEL$1") FULL(@"SEL$9F01FF23" "opt"."t3"@"SEL$3") FULL(@"SEL$9F01FF23" "opt"."t2"@"SEL$2") MERGE(@"SEL$3" > "SEL$2") MERGE(@"SEL$B9DE6649" > "SEL$1") UNNEST(@"SEL$4") SEMI_TO_INNER(@"SEL$1C11F6CF" "VIEW1") MERGE(@"SEL$4" < "SEL$01E9366A") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ((("opt.t4"@"SEL$1" "opt.t1"@"SEL$1" )"opt.t3"@"SEL$1" )"opt.t2"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t2"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t2"@"SEL$1" ) PARTITION NONE) NO_USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t2"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t3"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t3"@"SEL$1" ) PARTITION NONE) USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) INDEX(@"SEL$1" "opt"."t4"@"SEL$1" "idx_t4_c3") FULL(@"SEL$1" "opt"."t1"@"SEL$1") FULL(@"SEL$1" "opt"."t3"@"SEL$1") FULL(@"SEL$1" "opt"."t2"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 105(end) ************** *************** Case 106 *************** SQL: select /*+index(@SEL$3 t5@SEL$3 idx_t5_c2) index(@SEL$4 t4 idx_t4_c3)*/ t1.c1 from t1, (select t2.c1 from t2, (select t5.c1 from t5 group by t5.c2) t_a where t_a.c1 = t2.c1) t_a1 where t_a1.c1 = t1.c1 and t1.c1 in (select t4.c1 from t4); ======================================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ------------------------------------------------------------------------ |0 |PX COORDINATOR | |2 |582 | |1 | EXCHANGE OUT DISTR |:EX10005 |2 |582 | |2 | NESTED-LOOP JOIN | |2 |581 | |3 | EXCHANGE IN DISTR | |2 |568 | |4 | EXCHANGE OUT DISTR (PKEY) |:EX10004 |2 |568 | |5 | HASH JOIN | |2 |567 | |6 | EXCHANGE IN DISTR | |10 |175 | |7 | EXCHANGE OUT DISTR |:EX10001 |10 |174 | |8 | NESTED-LOOP JOIN | |10 |172 | |9 | EXCHANGE IN DISTR | |10 |106 | |10| EXCHANGE OUT DISTR (PKEY) |:EX10000 |10 |105 | |11| SUBPLAN SCAN |VIEW2 |10 |104 | |12| HASH DISTINCT | |10 |104 | |13| TABLE SCAN |t4(idx_t4_c3)|100 |78 | |14| PX PARTITION ITERATOR | |1 |29 | |15| TABLE GET |t1 |1 |29 | |16| EXCHANGE IN DISTR | |100 |366 | |17| EXCHANGE OUT DISTR |:EX10003 |100 |361 | |18| SUBPLAN SCAN |t_a |100 |351 | |19| MERGE GROUP BY | |100 |349 | |20| EXCHANGE IN MERGE SORT DISTR| |100 |344 | |21| EXCHANGE OUT DISTR (HASH) |:EX10002 |100 |330 | |22| PX PARTITION ITERATOR | |100 |303 | |23| MERGE GROUP BY | |100 |303 | |24| TABLE SCAN |t5(idx_t5_c2)|300 |290 | |25| PX PARTITION ITERATOR | |1 |18 | |26| TABLE GET |t2 |1 |18 | ======================================================================== 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]) 3 - output([t1.c1], [PARTITION_ID]), filter(nil) 4 - (#keys=1, [t1.c1]), output([t1.c1], [PARTITION_ID]), filter(nil), is_single, dop=1 5 - output([t1.c1]), filter(nil), equal_conds([t1.c1 = t_a.c1]), other_conds(nil) 6 - output([t1.c1]), filter(nil) 7 - output([t1.c1]), filter(nil), dop=1 8 - output([t1.c1]), filter(nil), conds(nil), nl_params_([VIEW2.VIEW1.c1]) 9 - output([PARTITION_ID], [VIEW2.VIEW1.c1]), filter(nil) 10 - (#keys=1, [VIEW2.VIEW1.c1]), output([PARTITION_ID], [VIEW2.VIEW1.c1]), filter(nil), is_single, dop=1 11 - output([VIEW2.VIEW1.c1]), filter(nil), access([VIEW2.VIEW1.c1]) 12 - output([t4.c1]), filter(nil), distinct([t4.c1]) 13 - output([t4.c1]), filter(nil), access([t4.c1]), partitions(p0) 14 - output([t1.c1]), filter(nil) 15 - output([t1.c1]), filter(nil), access([t1.c1]), partitions(p[0-4]) 16 - output([t_a.c1]), filter(nil) 17 - output([t_a.c1]), filter(nil), dop=1 18 - output([t_a.c1]), filter(nil), access([t_a.c1]) 19 - output([t5.c1]), filter(nil), group([t5.c2]), agg_func(nil) 20 - output([t5.c2], [t5.c1]), filter(nil), sort_keys([t5.c2, ASC]), Local Order 21 - (#keys=1, [t5.c2]), output([t5.c2], [t5.c1]), filter(nil), dop=1 22 - output([t5.c2], [t5.c1]), filter(nil) 23 - output([t5.c2], [t5.c1]), filter(nil), group([t5.c2]), agg_func(nil) 24 - output([t5.c2], [t5.c1]), filter(nil), access([t5.c2], [t5.c1]), partitions(p[0-2]) 25 - output(nil), filter(nil) 26 - output(nil), filter(nil), access([t2.c1]), partitions(p[0-2]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$75FC60FD" ((("VIEW2"@"SEL$2B49C46C" "opt"."t1"@"SEL$1") "t_a"@"SEL$2") "opt"."t2"@"SEL$2")) USE_NL(@"SEL$75FC60FD" "opt"."t2"@"SEL$2") PQ_DISTRIBUTE(@"SEL$75FC60FD" "opt"."t2"@"SEL$2" PARTITION NONE) USE_HASH(@"SEL$75FC60FD" "t_a"@"SEL$2") PQ_DISTRIBUTE(@"SEL$75FC60FD" "t_a"@"SEL$2" LOCAL LOCAL) USE_NL(@"SEL$75FC60FD" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$75FC60FD" "opt"."t1"@"SEL$1" PARTITION NONE) USE_HASH_DISTINCT(@"SEL$0AE88291") INDEX(@"SEL$0AE88291" "opt"."t4"@"SEL$4" "idx_t4_c3") FULL(@"SEL$75FC60FD" "opt"."t1"@"SEL$1") INDEX(@"SEL$3" "opt"."t5"@"SEL$3" "idx_t5_c2") FULL(@"SEL$75FC60FD" "opt"."t2"@"SEL$2") MERGE(@"SEL$2" > "SEL$1") UNNEST(@"SEL$4") SEMI_TO_INNER(@"SEL$2B49C46C" "VIEW1") MERGE(@"SEL$4" < "SEL$EB14A9B4") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ((("opt.t4"@"SEL$1" "opt.t1"@"SEL$1" )"t_a"@"SEL$1" )"opt.t2"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.t2"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t2"@"SEL$1" ) PARTITION NONE) NO_USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t2"@"SEL$1" )) USE_HASH(@"SEL$1" ("t_a"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("t_a"@"SEL$1" ) LOCAL LOCAL) USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) PARTITION NONE) INDEX(@"SEL$1" "opt"."t4"@"SEL$1" "idx_t4_c3") FULL(@"SEL$1" "opt"."t1"@"SEL$1") NO_USE_HASH_AGGREGATION(@"SEL$3") NO_USE_HASH_AGGREGATION(@"SEL$3") INDEX(@"SEL$3" "opt"."t5"@"SEL$3" "idx_t5_c2") FULL(@"SEL$1" "opt"."t2"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 106(end) ************** *************** Case 107 *************** SQL: select c2 from t_idx use index(t_c2); ================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| -------------------------------------------------- |0 |TABLE SCAN|t_idx(idx_t_idx_c2)|100 |78 | ================================================== Outputs & filters: ------------------------------------- 0 - output([t_idx.c2]), filter(nil), access([t_idx.c2]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "opt"."t_idx"@"SEL$1" "idx_t_idx_c2") <<<<<<< HEAD OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 107(end) ************** *************** Case 108 *************** SQL: select c120 from t_idx use index (idx_t_idx_c2, idx_t_idx_c3, idx_t_idx_c4, idx_t_idx_c5, idx_t_idx_c6, idx_t_idx_c7, idx_t_idx_c8, idx_t_idx_c9, idx_t_idx_c10, idx_t_idx_c11, idx_t_idx_c12, idx_t_idx_c13, idx_t_idx_c14, idx_t_idx_c15, idx_t_idx_c16, idx_t_idx_c17, idx_t_idx_c18, idx_t_idx_c19, idx_t_idx_c20, idx_t_idx_c21, idx_t_idx_c22, idx_t_idx_c23, idx_t_idx_c24, idx_t_idx_c25, idx_t_idx_c26, idx_t_idx_c27, idx_t_idx_c28, idx_t_idx_c29, idx_t_idx_c30, idx_t_idx_c31, idx_t_idx_c32, idx_t_idx_c33, idx_t_idx_c34, idx_t_idx_c35, idx_t_idx_c36, idx_t_idx_c37, idx_t_idx_c38, idx_t_idx_c39, idx_t_idx_c40, idx_t_idx_c41, idx_t_idx_c42, idx_t_idx_c43, idx_t_idx_c44, idx_t_idx_c45, idx_t_idx_c46, idx_t_idx_c47, idx_t_idx_c48, idx_t_idx_c49, idx_t_idx_c50, idx_t_idx_c51, idx_t_idx_c52, idx_t_idx_c53, idx_t_idx_c54, idx_t_idx_c55, idx_t_idx_c56, idx_t_idx_c57, idx_t_idx_c58, idx_t_idx_c59, idx_t_idx_c60, idx_t_idx_c61, idx_t_idx_c62, idx_t_idx_c63, idx_t_idx_c64, idx_t_idx_c65, idx_t_idx_c66, idx_t_idx_c67, idx_t_idx_c68, idx_t_idx_c69, idx_t_idx_c70, idx_t_idx_c71, idx_t_idx_c72, idx_t_idx_c73, idx_t_idx_c74, idx_t_idx_c75, idx_t_idx_c76, idx_t_idx_c77, idx_t_idx_c78, idx_t_idx_c79, idx_t_idx_c80, idx_t_idx_c81, idx_t_idx_c82, idx_t_idx_c83, idx_t_idx_c84, idx_t_idx_c85, idx_t_idx_c86, idx_t_idx_c87, idx_t_idx_c88, idx_t_idx_c89, idx_t_idx_c90, idx_t_idx_c91, idx_t_idx_c92, idx_t_idx_c93, idx_t_idx_c94, idx_t_idx_c95, idx_t_idx_c96, idx_t_idx_c97, idx_t_idx_c98, idx_t_idx_c99, idx_t_idx_c100, idx_t_idx_c101, idx_t_idx_c102, idx_t_idx_c103, idx_t_idx_c104, idx_t_idx_c105, idx_t_idx_c106, idx_t_idx_c107, idx_t_idx_c108, idx_t_idx_c109, idx_t_idx_c110, idx_t_idx_c111, idx_t_idx_c112, idx_t_idx_c113, idx_t_idx_c114, idx_t_idx_c115, idx_t_idx_c116, idx_t_idx_c117, idx_t_idx_c118, idx_t_idx_c119, idx_t_idx_c120, idx_t_idx_c121, idx_t_idx_c122, idx_t_idx_c123, idx_t_idx_c124, idx_t_idx_c125, idx_t_idx_c126, idx_t_idx_c127, idx_t_idx_c128, idx_t_idx_c129) where c120 = 1; ==================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------- |0 |TABLE SCAN|t_idx(idx_t_idx_c120)|100 |78 | ==================================================== Outputs & filters: ------------------------------------- 0 - output([t_idx.c120]), filter(nil), access([t_idx.c120]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "opt"."t_idx"@"SEL$1" "idx_t_idx_c120") <<<<<<< HEAD OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 108(end) ************** *************** Case 109 *************** SQL: select c120 from t_idx use index (idx_t_idx_c2, idx_t_idx_c2, idx_t_idx_c3, idx_t_idx_c4, idx_t_idx_c5, idx_t_idx_c6, idx_t_idx_c7, idx_t_idx_c8, idx_t_idx_c9, idx_t_idx_c10, idx_t_idx_c11, idx_t_idx_c12, idx_t_idx_c13, idx_t_idx_c14, idx_t_idx_c15, idx_t_idx_c16, idx_t_idx_c17, idx_t_idx_c18, idx_t_idx_c19, idx_t_idx_c20, idx_t_idx_c21, idx_t_idx_c22, idx_t_idx_c23, idx_t_idx_c24, idx_t_idx_c25, idx_t_idx_c26, idx_t_idx_c27, idx_t_idx_c28, idx_t_idx_c29, idx_t_idx_c30, idx_t_idx_c31, idx_t_idx_c32, idx_t_idx_c33, idx_t_idx_c34, idx_t_idx_c35, idx_t_idx_c36, idx_t_idx_c37, idx_t_idx_c38, idx_t_idx_c39, idx_t_idx_c40, idx_t_idx_c41, idx_t_idx_c42, idx_t_idx_c43, idx_t_idx_c44, idx_t_idx_c45, idx_t_idx_c46, idx_t_idx_c47, idx_t_idx_c48, idx_t_idx_c49, idx_t_idx_c50, idx_t_idx_c51, idx_t_idx_c52, idx_t_idx_c53, idx_t_idx_c54, idx_t_idx_c55, idx_t_idx_c56, idx_t_idx_c57, idx_t_idx_c58, idx_t_idx_c59, idx_t_idx_c60, idx_t_idx_c61, idx_t_idx_c62, idx_t_idx_c63, idx_t_idx_c64, idx_t_idx_c65, idx_t_idx_c66, idx_t_idx_c67, idx_t_idx_c68, idx_t_idx_c69, idx_t_idx_c70, idx_t_idx_c71, idx_t_idx_c72, idx_t_idx_c73, idx_t_idx_c74, idx_t_idx_c75, idx_t_idx_c76, idx_t_idx_c77, idx_t_idx_c78, idx_t_idx_c79, idx_t_idx_c80, idx_t_idx_c81, idx_t_idx_c82, idx_t_idx_c83, idx_t_idx_c84, idx_t_idx_c85, idx_t_idx_c86, idx_t_idx_c87, idx_t_idx_c88, idx_t_idx_c89, idx_t_idx_c90, idx_t_idx_c91, idx_t_idx_c92, idx_t_idx_c93, idx_t_idx_c94, idx_t_idx_c95, idx_t_idx_c96, idx_t_idx_c97, idx_t_idx_c98, idx_t_idx_c99, idx_t_idx_c100, idx_t_idx_c101, idx_t_idx_c102, idx_t_idx_c103, idx_t_idx_c104, idx_t_idx_c105, idx_t_idx_c106, idx_t_idx_c107, idx_t_idx_c108, idx_t_idx_c109, idx_t_idx_c110, idx_t_idx_c111, idx_t_idx_c112, idx_t_idx_c113, idx_t_idx_c114, idx_t_idx_c115, idx_t_idx_c116, idx_t_idx_c117, idx_t_idx_c118, idx_t_idx_c119, idx_t_idx_c120, idx_t_idx_c121, idx_t_idx_c122, idx_t_idx_c123, idx_t_idx_c124, idx_t_idx_c125, idx_t_idx_c126, idx_t_idx_c127, idx_t_idx_c128, idx_t_idx_c129) where c120 = 1; ==================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------- |0 |TABLE SCAN|t_idx(idx_t_idx_c120)|100 |78 | ==================================================== Outputs & filters: ------------------------------------- 0 - output([t_idx.c120]), filter(nil), access([t_idx.c120]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "opt"."t_idx"@"SEL$1" "idx_t_idx_c120") <<<<<<< HEAD OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 109(end) ************** *************** Case 110 *************** SQL: select /*+use_plan_cache(none)*/ * from hint.t1; =================================== |ID|OPERATOR |NAME|EST. ROWS|COST| ----------------------------------- |0 |TABLE SCAN|t1 |100 |78 | =================================== Outputs & filters: ------------------------------------- 0 - output([t1.a], [t1.b]), filter(nil), access([t1.a], [t1.b]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA FULL(@"SEL$1" "hint"."t1"@"SEL$1") <<<<<<< HEAD USE_PLAN_CACHE( NONE ) OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= USE_PLAN_CACHE("NONE") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 110(end) ************** *************** Case 111 *************** SQL: select /*+use_plan_cache(meaningless)*/ * from hint.t1; =================================== |ID|OPERATOR |NAME|EST. ROWS|COST| ----------------------------------- |0 |TABLE SCAN|t1 |100 |78 | =================================== Outputs & filters: ------------------------------------- 0 - output([t1.a], [t1.b]), filter(nil), access([t1.a], [t1.b]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA FULL(@"SEL$1" "hint"."t1"@"SEL$1") <<<<<<< HEAD OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 111(end) ************** *************** Case 112 *************** SQL: select /*+ index(t1 primary) */ * from hint.t1 order by a desc; ========================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ------------------------------------------ |0 |TABLE SCAN|t1(Reverse)|100 |78 | ========================================== Outputs & filters: ------------------------------------- 0 - output([t1.a], [t1.b]), filter(nil), access([t1.a], [t1.b]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA FULL(@"SEL$1" "hint"."t1"@"SEL$1") <<<<<<< HEAD OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 112(end) ************** *************** Case 113 *************** SQL: select min(a) from z1 za where za.a in (select a from z1); ========================================= |ID|OPERATOR |NAME |EST. ROWS|COST| ----------------------------------------- |0 |SCALAR GROUP BY| |1 |46 | |1 | SUBPLAN SCAN |VIEW2|1 |46 | |2 | TABLE SCAN |za |1 |46 | ========================================= Outputs & filters: ------------------------------------- 0 - output([T_FUN_MIN(VIEW2.za.a)]), filter(nil), group(nil), agg_func([T_FUN_MIN(VIEW2.za.a)]) 1 - output([VIEW2.za.a]), filter(nil), access([VIEW2.za.a]) 2 - output([za.a]), filter(nil), access([za.a]), partitions(p0), limit(1), offset(nil) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD FULL(@"SEL$1BEFA784" "opt"."za"@"SEL$1") UNNEST(@"SEL$2") SEMI_TO_INNER(@"SEL$6FCAE2AA" "VIEW1") MERGE(@"SEL$2" > "SEL$E5385516") ELIMINATE_JOIN(@"SEL$FE336D0E" "opt"."z1"@"SEL$FE336D0E") FAST_MINMAX(@"SEL$277F5D16") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= FULL(@"SEL$3" "opt"."za"@"SEL$3") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 113(end) ************** *************** Case 114 *************** SQL: select /*+ INDEX(@SEL$3 opt.z1@SEL$2 z1_b)*/ min(a) from z1 za where za.a in (select a from z1); ========================================= |ID|OPERATOR |NAME |EST. ROWS|COST| ----------------------------------------- |0 |SCALAR GROUP BY| |1 |46 | |1 | SUBPLAN SCAN |VIEW2|1 |46 | |2 | TABLE SCAN |za |1 |46 | ========================================= Outputs & filters: ------------------------------------- 0 - output([T_FUN_MIN(VIEW2.za.a)]), filter(nil), group(nil), agg_func([T_FUN_MIN(VIEW2.za.a)]) 1 - output([VIEW2.za.a]), filter(nil), access([VIEW2.za.a]) 2 - output([za.a]), filter(nil), access([za.a]), partitions(p0), limit(1), offset(nil) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD FULL(@"SEL$1BEFA784" "opt"."za"@"SEL$1") UNNEST(@"SEL$2") SEMI_TO_INNER(@"SEL$6FCAE2AA" "VIEW1") MERGE(@"SEL$2" > "SEL$E5385516") ELIMINATE_JOIN(@"SEL$FE336D0E" "opt"."z1"@"SEL$FE336D0E") FAST_MINMAX(@"SEL$277F5D16") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= FULL(@"SEL$3" "opt"."za"@"SEL$3") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 114(end) ************** *************** Case 115 *************** SQL: select /*+index(z1 z1_b)*/ * from z1 ignore key(a); ======================================= |ID|OPERATOR |NAME |EST. ROWS|COST| --------------------------------------- |0 |TABLE SCAN|z1(z1_b)|100 |102 | ======================================= Outputs & filters: ------------------------------------- 0 - output([z1.a], [z1.b], [z1.c], [z1.d]), filter(nil), access([z1.a], [z1.b], [z1.c], [z1.d]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "opt"."z1"@"SEL$1" "z1_b") <<<<<<< HEAD OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 115(end) ************** *************** Case 116 *************** SQL: select /*+index(z1 z1_b)*/ * from z1 ignore key(z1_b); =================================== |ID|OPERATOR |NAME|EST. ROWS|COST| ----------------------------------- |0 |TABLE SCAN|z1 |100 |78 | =================================== Outputs & filters: ------------------------------------- 0 - output([z1.a], [z1.b], [z1.c], [z1.d]), filter(nil), access([z1.a], [z1.b], [z1.c], [z1.d]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD FULL(@"SEL$1" "opt"."z1"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= INDEX(@"SEL$1" "opt"."z1"@"SEL$1" "z1_b") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 116(end) ************** *************** Case 117 *************** SQL: select /*+use_hash(t1,t2) no_use_hash_aggregation*/* from t1 left join t2 using(c2) group by t1.c2 order by t1.c2; ============================================================ |ID|OPERATOR |NAME |EST. ROWS|COST| ------------------------------------------------------------ |0 |MERGE GROUP BY | |100 |2291| |1 | SORT | |1216 |2236| |2 | HASH OUTER JOIN | |1216 |1186| |3 | PX COORDINATOR | |500 |528 | |4 | EXCHANGE OUT DISTR |:EX10000 |500 |481 | |5 | PX PARTITION ITERATOR| |500 |387 | |6 | TABLE SCAN |t1(idx_t1_c2)|500 |387 | |7 | PX COORDINATOR | |300 |464 | |8 | EXCHANGE OUT DISTR |:EX20000 |300 |391 | |9 | PX PARTITION ITERATOR| |300 |233 | |10| TABLE SCAN |t2 |300 |233 | ============================================================ Outputs & filters: ------------------------------------- 0 - output([t1.c2], [t1.c1], [t2.c1], [t2.c3]), filter(nil), group([t1.c2]), agg_func(nil) 1 - output([t1.c2], [t1.c1], [t2.c1], [t2.c3]), filter(nil), sort_keys([t1.c2, ASC]) 2 - output([t1.c2], [t1.c1], [t2.c1], [t2.c3]), filter(nil), equal_conds([t1.c2 = t2.c2]), other_conds(nil) 3 - output([t1.c2], [t1.c1]), filter(nil) 4 - output([t1.c2], [t1.c1]), filter(nil), dop=1 5 - output([t1.c1], [t1.c2]), filter(nil) 6 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) 7 - output([t2.c1], [t2.c3], [t2.c2]), filter(nil) 8 - output([t2.c1], [t2.c3], [t2.c2]), filter(nil), dop=1 9 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 10 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("opt"."t1"@"SEL$1" "opt"."t2"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."t2"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t2"@"SEL$1" LOCAL LOCAL) INDEX(@"SEL$1" "opt"."t1"@"SEL$1" "idx_t1_c2") FULL(@"SEL$1" "opt"."t2"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= NO_USE_HASH_AGGREGATION(@"SEL$1") LEADING(@"SEL$1" ("opt.t2"@"SEL$1" "opt.t1"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) LOCAL LOCAL) FULL(@"SEL$1" "opt"."t2"@"SEL$1") INDEX(@"SEL$1" "opt"."t1"@"SEL$1" "idx_t1_c2") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 117(end) ************** *************** Case 118 *************** SQL: select /*+use_hash(t1,t2) no_use_hash_aggregation*/* from t1 left join t2 using(c2) group by t1.c2 order by t2.c3 limit 3; ============================================================= |ID|OPERATOR |NAME |EST. ROWS|COST| ------------------------------------------------------------- |0 |TOP-N SORT | |3 |2304| |1 | MERGE GROUP BY | |100 |2291| |2 | SORT | |1216 |2236| |3 | HASH OUTER JOIN | |1216 |1186| |4 | PX COORDINATOR | |500 |528 | |5 | EXCHANGE OUT DISTR |:EX10000 |500 |481 | |6 | PX PARTITION ITERATOR| |500 |387 | |7 | TABLE SCAN |t1(idx_t1_c2)|500 |387 | |8 | PX COORDINATOR | |300 |464 | |9 | EXCHANGE OUT DISTR |:EX20000 |300 |391 | |10| PX PARTITION ITERATOR| |300 |233 | |11| TABLE SCAN |t2 |300 |233 | ============================================================= Outputs & filters: ------------------------------------- 0 - output([t1.c2], [t1.c1], [t2.c1], [t2.c3]), filter(nil), sort_keys([t2.c3, ASC]), topn(3) 1 - output([t2.c3], [t1.c2], [t1.c1], [t2.c1]), filter(nil), group([t1.c2]), agg_func(nil) 2 - output([t2.c3], [t1.c2], [t1.c1], [t2.c1]), filter(nil), sort_keys([t1.c2, ASC]) 3 - output([t2.c3], [t1.c2], [t1.c1], [t2.c1]), filter(nil), equal_conds([t1.c2 = t2.c2]), other_conds(nil) 4 - output([t1.c2], [t1.c1]), filter(nil) 5 - output([t1.c2], [t1.c1]), filter(nil), dop=1 6 - output([t1.c1], [t1.c2]), filter(nil) 7 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) 8 - output([t2.c3], [t2.c1], [t2.c2]), filter(nil) 9 - output([t2.c3], [t2.c1], [t2.c2]), filter(nil), dop=1 10 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil) 11 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), access([t2.c1], [t2.c2], [t2.c3]), partitions(p[0-2]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("opt"."t1"@"SEL$1" "opt"."t2"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."t2"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t2"@"SEL$1" LOCAL LOCAL) INDEX(@"SEL$1" "opt"."t1"@"SEL$1" "idx_t1_c2") FULL(@"SEL$1" "opt"."t2"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= NO_USE_HASH_AGGREGATION(@"SEL$1") LEADING(@"SEL$1" ("opt.t2"@"SEL$1" "opt.t1"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) LOCAL LOCAL) FULL(@"SEL$1" "opt"."t2"@"SEL$1") INDEX(@"SEL$1" "opt"."t1"@"SEL$1" "idx_t1_c2") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 118(end) ************** *************** Case 119 *************** SQL: select /*+ use_bnl(hint.t2, opt.t1)*/ * from hint.t2, opt.t1 where opt.t1.c2 = hint.t2.a; ========================================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ---------------------------------------------------------- |0 |HASH JOIN | |451 |749 | |1 | TABLE SCAN |t2 |100 |78 | |2 | PX COORDINATOR | |500 |528 | |3 | EXCHANGE OUT DISTR |:EX10000 |500 |481 | |4 | PX PARTITION ITERATOR| |500 |387 | |5 | TABLE SCAN |t1(idx_t1_c2)|500 |387 | ========================================================== Outputs & filters: ------------------------------------- 0 - output([t2.a], [t2.b], [t1.c1], [t1.c2]), filter(nil), equal_conds([t1.c2 = t2.a]), other_conds(nil) 1 - output([t2.a], [t2.b]), filter(nil), access([t2.a], [t2.b]), partitions(p0) 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) 5 - output([t1.c1], [t1.c2]), filter(nil), access([t1.c1], [t1.c2]), partitions(p[0-4]) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD LEADING(@"SEL$1" ("hint"."t2"@"SEL$1" "opt"."t1"@"SEL$1")) USE_HASH(@"SEL$1" "opt"."t1"@"SEL$1") PQ_DISTRIBUTE(@"SEL$1" "opt"."t1"@"SEL$1" LOCAL LOCAL) FULL(@"SEL$1" "hint"."t2"@"SEL$1") INDEX(@"SEL$1" "opt"."t1"@"SEL$1" "idx_t1_c2") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("hint.t2"@"SEL$1" "opt.t1"@"SEL$1" )) USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.t1"@"SEL$1" ) LOCAL LOCAL) FULL(@"SEL$1" "hint"."t2"@"SEL$1") INDEX(@"SEL$1" "opt"."t1"@"SEL$1" "idx_t1_c2") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 119(end) ************** *************** Case 120 *************** SQL: select /*+ leading (b a) */ distinct * from hint_t1 a, hint_v1 b; ======================================================= |ID|OPERATOR |NAME |EST. ROWS|COST| ------------------------------------------------------- |0 |HASH DISTINCT | |71 |5289| |1 | NESTED-LOOP JOIN CARTESIAN| |10000 |2736| |2 | TABLE SCAN |hint_t2|100 |78 | |3 | MATERIAL | |100 |78 | |4 | TABLE SCAN |a |100 |78 | ======================================================= Outputs & filters: ------------------------------------- 0 - output([a.c1], [hint_t2.c2]), filter(nil), distinct([a.c1], [hint_t2.c2]) 1 - output([a.c1], [hint_t2.c2]), filter(nil), conds(nil), nl_params_(nil) 2 - output([hint_t2.c2]), filter(nil), access([hint_t2.c2]), partitions(p0) 3 - output([a.c1]), filter(nil) 4 - output([a.c1]), filter(nil), access([a.c1]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD USE_HASH_DISTINCT(@"SEL$CFEA49FE") LEADING(@"SEL$CFEA49FE" ("opt"."hint_t2"@"SEL$2" "opt"."a"@"SEL$1")) USE_NL(@"SEL$CFEA49FE" "opt"."a"@"SEL$1") USE_NL_MATERIALIZATION(@"SEL$CFEA49FE" "opt"."a"@"SEL$1") FULL(@"SEL$CFEA49FE" "opt"."hint_t2"@"SEL$2") FULL(@"SEL$CFEA49FE" "opt"."a"@"SEL$1") MERGE(@"SEL$2" > "SEL$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= LEADING(@"SEL$1" ("opt.hint_t2"@"SEL$1" "opt.a"@"SEL$1" )) USE_NL(@"SEL$1" ("opt.a"@"SEL$1" )) PQ_DISTRIBUTE(@"SEL$1" ("opt.a"@"SEL$1" ) LOCAL LOCAL) USE_NL_MATERIALIZATION(@"SEL$1" ("opt.a"@"SEL$1" )) FULL(@"SEL$1" "opt"."hint_t2"@"SEL$1") FULL(@"SEL$1" "opt"."a"@"SEL$1") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 120(end) ************** *************** Case 121 *************** SQL: select /*+read_consistency(weak)*/ * from (select distinct * from hint_t1) as a limit 5; ========================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ------------------------------------------ |0 |LIMIT | |5 |49 | |1 | HASH DISTINCT| |5 |49 | |2 | TABLE SCAN |hint_t1|7 |46 | ========================================== Outputs & filters: ------------------------------------- 0 - output([hint_t1.c1]), filter(nil), limit(5), offset(nil) 1 - output([hint_t1.c1]), filter(nil), distinct([hint_t1.c1]) 2 - output([hint_t1.c1]), filter(nil), access([hint_t1.c1]), partitions(p0) Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA <<<<<<< HEAD USE_HASH_DISTINCT(@"SEL$F53088DF") FULL(@"SEL$F53088DF" "opt"."hint_t1"@"SEL$2") MERGE(@"SEL$2" < "SEL$1") READ_CONSISTENCY( WEAK ) OPTIMIZER_FEATURES_ENABLE('4.0.0.0') ======= FULL(@"SEL$2" "opt"."hint_t1"@"SEL$2") READ_CONSISTENCY("WEAK") >>>>>>> implement spm part1 END_OUTLINE_DATA */ *************** Case 121(end) **************