7183 lines
		
	
	
		
			308 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			7183 lines
		
	
	
		
			308 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| ***************   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)  ************** 
 | |
| 
 | 
