5994 lines
		
	
	
		
			265 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			5994 lines
		
	
	
		
			265 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| ***************   Case 1   ***************
 | |
| 
 | |
| SQL: select /*+ log_level(debug)*/ * from hint.t1; 
 | |
| 
 | |
| ===================================
 | |
| |ID|OPERATOR  |NAME|EST. ROWS|COST|
 | |
| -----------------------------------
 | |
| |0 |TABLE SCAN|t1  |100      |90  |
 | |
| ===================================
 | |
| 
 | |
| 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")
 | |
|       LOG_LEVEL('debug')
 | |
|       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      |90  |
 | |
| ===================================
 | |
| 
 | |
| 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")
 | |
|       LOG_LEVEL('sql.opt:debug')
 | |
|       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      |18746|
 | |
| |1 | PX COORDINATOR         |        |500      |389  |
 | |
| |2 |  EXCHANGE OUT DISTR    |:EX10000|500      |342  |
 | |
| |3 |   PX PARTITION ITERATOR|        |500      |342  |
 | |
| |4 |    TABLE SCAN          |ta      |500      |342  |
 | |
| |5 | TABLE GET              |tb      |1        |36   |
 | |
| ======================================================
 | |
| 
 | |
| 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
 | |
|       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" ) BC2HOST NONE)
 | |
|       NO_USE_NL_MATERIALIZATION(@"SEL$1" ("hint.tb"@"SEL$1" ))
 | |
|       FULL(@"SEL$1" "opt.ta"@"SEL$1")
 | |
|       FULL(@"SEL$1" "hint.tb"@"SEL$1")
 | |
|       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      |1334|
 | |
| |1 | EXCHANGE OUT DISTR          |:EX10001|100      |1316|
 | |
| |2 |  MERGE JOIN                 |        |100      |1316|
 | |
| |3 |   SORT                      |        |500      |1074|
 | |
| |4 |    PX PARTITION ITERATOR    |        |500      |342 |
 | |
| |5 |     TABLE SCAN              |ta      |500      |342 |
 | |
| |6 |   EXCHANGE IN DISTR         |        |100      |100 |
 | |
| |7 |    EXCHANGE OUT DISTR (PKEY)|:EX10000|100      |90  |
 | |
| |8 |     TABLE SCAN              |tb      |100      |90  |
 | |
| ==========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([tb.a], [tb.b], [ta.c1], [ta.c2]), filter(nil)
 | |
|   1 - output([tb.a], [tb.b], [ta.c1], [ta.c2]), filter(nil), dop=1
 | |
|   2 - output([tb.a], [tb.b], [ta.c1], [ta.c2]), filter(nil), 
 | |
|       equal_conds([tb.a = ta.c1]), 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
 | |
|       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")
 | |
|       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    |8642|
 | |
| |1 | PX COORDINATOR               |        |100      |1334|
 | |
| |2 |  EXCHANGE OUT DISTR          |:EX10001|100      |1316|
 | |
| |3 |   MERGE JOIN                 |        |100      |1316|
 | |
| |4 |    EXCHANGE IN DISTR         |        |100      |100 |
 | |
| |5 |     EXCHANGE OUT DISTR (PKEY)|:EX10000|100      |90  |
 | |
| |6 |      TABLE SCAN              |t2      |100      |90  |
 | |
| |7 |    SORT                      |        |500      |1074|
 | |
| |8 |     PX PARTITION ITERATOR    |        |500      |342 |
 | |
| |9 |      TABLE SCAN              |t1      |500      |342 |
 | |
| |10| MATERIAL                     |        |100      |127 |
 | |
| |11|  TABLE SCAN                  |t1      |100      |90  |
 | |
| ===========================================================
 | |
| 
 | |
| 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([t2.a], [t2.b], [t1.c1], [t1.c2]), filter(nil)
 | |
|   2 - output([t2.a], [t2.b], [t1.c1], [t1.c2]), filter(nil), dop=1
 | |
|   3 - output([t2.a], [t2.b], [t1.c1], [t1.c2]), filter(nil), 
 | |
|       equal_conds([t2.a = t1.c1]), other_conds(nil)
 | |
|   4 - output([t2.a], [t2.b]), filter(nil)
 | |
|   5 - (#keys=1, [t2.a]), output([t2.a], [t2.b]), filter(nil), is_single, dop=1
 | |
|   6 - output([t2.a], [t2.b]), filter(nil), 
 | |
|       access([t2.a], [t2.b]), partitions(p0)
 | |
|   7 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   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([t1.a], [t1.b]), filter(nil)
 | |
|   11 - output([t1.a], [t1.b]), filter(nil), 
 | |
|       access([t1.a], [t1.b]), partitions(p0)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" (("hint.t2"@"SEL$1" "opt.t1"@"SEL$1" )"hint.t1"@"SEL$1" ))
 | |
|       USE_NL(@"SEL$1" ("hint.t1"@"SEL$1" ))
 | |
|       USE_NL_MATERIALIZATION(@"SEL$1" ("hint.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")
 | |
|       FULL(@"SEL$1" "hint.t1"@"SEL$1")
 | |
|       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    |8887|
 | |
| |1 | TABLE SCAN                    |t1      |100      |90  |
 | |
| |2 | MATERIAL                      |        |100      |1408|
 | |
| |3 |  PX COORDINATOR               |        |100      |1334|
 | |
| |4 |   EXCHANGE OUT DISTR          |:EX10001|100      |1316|
 | |
| |5 |    MERGE JOIN                 |        |100      |1316|
 | |
| |6 |     EXCHANGE IN DISTR         |        |100      |100 |
 | |
| |7 |      EXCHANGE OUT DISTR (PKEY)|:EX10000|100      |90  |
 | |
| |8 |       TABLE SCAN              |t2      |100      |90  |
 | |
| |9 |     SORT                      |        |500      |1074|
 | |
| |10|      PX PARTITION ITERATOR    |        |500      |342 |
 | |
| |11|       TABLE SCAN              |t1      |500      |342 |
 | |
| ============================================================
 | |
| 
 | |
| 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), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   10 - output([t1.c1], [t1.c2]), filter(nil)
 | |
|   11 - output([t1.c1], [t1.c2]), filter(nil), 
 | |
|       access([t1.c1], [t1.c2]), partitions(p[0-4])
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       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" ))
 | |
|       USE_NL_MATERIALIZATION(@"SEL$1" ("hint.t2"@"SEL$1" "opt.t1"@"SEL$1" ))
 | |
|       FULL(@"SEL$1" "hint.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")
 | |
|       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      |1334|
 | |
| |1 | EXCHANGE OUT DISTR          |:EX10001|100      |1316|
 | |
| |2 |  MERGE JOIN                 |        |100      |1316|
 | |
| |3 |   EXCHANGE IN DISTR         |        |100      |100 |
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)|:EX10000|100      |90  |
 | |
| |5 |     TABLE SCAN              |t2      |100      |90  |
 | |
| |6 |   SORT                      |        |500      |1074|
 | |
| |7 |    PX PARTITION ITERATOR    |        |500      |342 |
 | |
| |8 |     TABLE SCAN              |t1      |500      |342 |
 | |
| ==========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t2.a], [t2.b], [t1.c1], [t1.c2]), filter(nil)
 | |
|   1 - output([t2.a], [t2.b], [t1.c1], [t1.c2]), filter(nil), dop=1
 | |
|   2 - output([t2.a], [t2.b], [t1.c1], [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
 | |
|       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")
 | |
|       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      |1847|
 | |
| |1 | EXCHANGE OUT DISTR          |:EX10001    |100      |1828|
 | |
| |2 |  MERGE JOIN                 |            |100      |1828|
 | |
| |3 |   SORT                      |            |500      |1074|
 | |
| |4 |    PX PARTITION ITERATOR    |            |500      |342 |
 | |
| |5 |     TABLE SCAN              |t1          |500      |342 |
 | |
| |6 |   EXCHANGE IN DISTR         |            |100      |613 |
 | |
| |7 |    EXCHANGE OUT DISTR (PKEY)|:EX10000    |100      |603 |
 | |
| |8 |     TABLE SCAN              |t1(idx_t1_a)|100      |603 |
 | |
| ==============================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t1.a], [t1.b]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t1.a], [t1.b]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t1.a], [t1.b]), filter(nil), 
 | |
|       equal_conds([t1.a = t1.c1]), other_conds(nil)
 | |
|   3 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   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])
 | |
|   6 - output([t1.a], [t1.b]), filter(nil)
 | |
|   7 - (#keys=1, [t1.a]), output([t1.a], [t1.b]), filter(nil), is_single, dop=1
 | |
|   8 - output([t1.a], [t1.b]), filter(nil), 
 | |
|       access([t1.a], [t1.b]), partitions(p0)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "hint.t1"@"SEL$1" ))
 | |
|       USE_MERGE(@"SEL$1" ("hint.t1"@"SEL$1" ))
 | |
|       PQ_DISTRIBUTE(@"SEL$1" ("hint.t1"@"SEL$1" ) NONE PARTITION)
 | |
|       FULL(@"SEL$1" "opt.t1"@"SEL$1")
 | |
|       INDEX(@"SEL$1" "hint.t1"@"SEL$1" "idx_t1_a")
 | |
|       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               |        |490      |1061|
 | |
| |1 | TABLE SCAN             |t1      |100      |90  |
 | |
| |2 | PX COORDINATOR         |        |500      |389 |
 | |
| |3 |  EXCHANGE OUT DISTR    |:EX10000|500      |342 |
 | |
| |4 |   PX PARTITION ITERATOR|        |500      |342 |
 | |
| |5 |    TABLE SCAN          |t1      |500      |342 |
 | |
| =====================================================
 | |
| 
 | |
| 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
 | |
|       LEADING(@"SEL$1" ("hint.t1"@"SEL$1" "opt.t1"@"SEL$1" ))
 | |
|       USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" ))
 | |
|       FULL(@"SEL$1" "hint.t1"@"SEL$1")
 | |
|       FULL(@"SEL$1" "opt.t1"@"SEL$1")
 | |
|       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 |11435129|
 | |
| |1 | NESTED-LOOP JOIN CARTESIAN|        |50000    |36567   |
 | |
| |2 |  TABLE SCAN               |t2      |100      |90      |
 | |
| |3 |  MATERIAL                 |        |500      |573     |
 | |
| |4 |   PX COORDINATOR          |        |500      |389     |
 | |
| |5 |    EXCHANGE OUT DISTR     |:EX10000|500      |342     |
 | |
| |6 |     PX PARTITION ITERATOR |        |500      |342     |
 | |
| |7 |      TABLE SCAN           |t1      |500      |342     |
 | |
| |8 | MATERIAL                  |        |300      |621     |
 | |
| |9 |  PX COORDINATOR           |        |300      |290     |
 | |
| |10|   EXCHANGE OUT DISTR      |:EX20000|300      |205     |
 | |
| |11|    PX PARTITION ITERATOR  |        |300      |205     |
 | |
| |12|     TABLE SCAN            |t2      |300      |205     |
 | |
| ============================================================
 | |
| 
 | |
| 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
 | |
|       LEADING(@"SEL$1" (("hint.t2"@"SEL$1" "opt.t1"@"SEL$1" )"opt.t2"@"SEL$1" ))
 | |
|       USE_NL(@"SEL$1" ("opt.t2"@"SEL$1" ))
 | |
|       USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t2"@"SEL$1" ))
 | |
|       USE_NL(@"SEL$1" ("opt.t1"@"SEL$1" ))
 | |
|       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")
 | |
|       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 |11434982|
 | |
| |1 | NESTED-LOOP JOIN CARTESIAN|        |50000    |36420   |
 | |
| |2 |  PX COORDINATOR           |        |500      |389     |
 | |
| |3 |   EXCHANGE OUT DISTR      |:EX10000|500      |342     |
 | |
| |4 |    PX PARTITION ITERATOR  |        |500      |342     |
 | |
| |5 |     TABLE SCAN            |t1      |500      |342     |
 | |
| |6 |  MATERIAL                 |        |100      |127     |
 | |
| |7 |   TABLE SCAN              |t2      |100      |90      |
 | |
| |8 | MATERIAL                  |        |300      |621     |
 | |
| |9 |  PX COORDINATOR           |        |300      |290     |
 | |
| |10|   EXCHANGE OUT DISTR      |:EX20000|300      |205     |
 | |
| |11|    PX PARTITION ITERATOR  |        |300      |205     |
 | |
| |12|     TABLE SCAN            |t2      |300      |205     |
 | |
| ============================================================
 | |
| 
 | |
| 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([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])
 | |
|   6 - output([t2.a], [t2.b]), filter(nil)
 | |
|   7 - output([t2.a], [t2.b]), filter(nil), 
 | |
|       access([t2.a], [t2.b]), partitions(p0)
 | |
|   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
 | |
|       LEADING(@"SEL$1" (("opt.t1"@"SEL$1" "hint.t2"@"SEL$1" )"opt.t2"@"SEL$1" ))
 | |
|       USE_NL(@"SEL$1" ("opt.t2"@"SEL$1" ))
 | |
|       USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t2"@"SEL$1" ))
 | |
|       USE_NL(@"SEL$1" ("hint.t2"@"SEL$1" ))
 | |
|       USE_NL_MATERIALIZATION(@"SEL$1" ("hint.t2"@"SEL$1" ))
 | |
|       FULL(@"SEL$1" "opt.t1"@"SEL$1")
 | |
|       FULL(@"SEL$1" "hint.t2"@"SEL$1")
 | |
|       FULL(@"SEL$1" "opt.t2"@"SEL$1")
 | |
|       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 |10879962|
 | |
| |1 | NESTED-LOOP JOIN CARTESIAN|        |150000   |108575  |
 | |
| |2 |  PX COORDINATOR           |        |300      |290     |
 | |
| |3 |   EXCHANGE OUT DISTR      |:EX10000|300      |205     |
 | |
| |4 |    PX PARTITION ITERATOR  |        |300      |205     |
 | |
| |5 |     TABLE SCAN            |t2      |300      |205     |
 | |
| |6 |  MATERIAL                 |        |500      |573     |
 | |
| |7 |   PX COORDINATOR          |        |500      |389     |
 | |
| |8 |    EXCHANGE OUT DISTR     |:EX20000|500      |342     |
 | |
| |9 |     PX PARTITION ITERATOR |        |500      |342     |
 | |
| |10|      TABLE SCAN           |t1      |500      |342     |
 | |
| |11| MATERIAL                  |        |100      |127     |
 | |
| |12|  TABLE SCAN               |t2      |100      |90      |
 | |
| ============================================================
 | |
| 
 | |
| 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
 | |
|       LEADING(@"SEL$1" (("opt.t2"@"SEL$1" "opt.t1"@"SEL$1" )"hint.t2"@"SEL$1" ))
 | |
|       USE_NL(@"SEL$1" ("hint.t2"@"SEL$1" ))
 | |
|       USE_NL_MATERIALIZATION(@"SEL$1" ("hint.t2"@"SEL$1" ))
 | |
|       USE_NL(@"SEL$1" ("opt.t1"@"SEL$1" ))
 | |
|       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")
 | |
|       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 |10879962|
 | |
| |1 | NESTED-LOOP JOIN CARTESIAN|        |150000   |108575  |
 | |
| |2 |  PX COORDINATOR           |        |300      |290     |
 | |
| |3 |   EXCHANGE OUT DISTR      |:EX10000|300      |205     |
 | |
| |4 |    PX PARTITION ITERATOR  |        |300      |205     |
 | |
| |5 |     TABLE SCAN            |t2      |300      |205     |
 | |
| |6 |  MATERIAL                 |        |500      |573     |
 | |
| |7 |   PX COORDINATOR          |        |500      |389     |
 | |
| |8 |    EXCHANGE OUT DISTR     |:EX20000|500      |342     |
 | |
| |9 |     PX PARTITION ITERATOR |        |500      |342     |
 | |
| |10|      TABLE SCAN           |t1      |500      |342     |
 | |
| |11| MATERIAL                  |        |100      |127     |
 | |
| |12|  TABLE SCAN               |t2      |100      |90      |
 | |
| ============================================================
 | |
| 
 | |
| 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
 | |
|       LEADING(@"SEL$1" (("opt.t2"@"SEL$1" "opt.t1"@"SEL$1" )"hint.t2"@"SEL$1" ))
 | |
|       USE_NL(@"SEL$1" ("hint.t2"@"SEL$1" ))
 | |
|       USE_NL_MATERIALIZATION(@"SEL$1" ("hint.t2"@"SEL$1" ))
 | |
|       USE_NL(@"SEL$1" ("opt.t1"@"SEL$1" ))
 | |
|       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")
 | |
|       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               |        |290      |1651|
 | |
| |1 | EXCHANGE OUT DISTR          |:EX10001|290      |1541|
 | |
| |2 |  HASH JOIN                  |        |290      |1541|
 | |
| |3 |   PX PARTITION ITERATOR     |        |500      |342 |
 | |
| |4 |    TABLE SCAN               |t1      |500      |342 |
 | |
| |5 |   EXCHANGE IN DISTR         |        |300      |290 |
 | |
| |6 |    EXCHANGE OUT DISTR (PKEY)|:EX10000|300      |205 |
 | |
| |7 |     PX PARTITION ITERATOR   |        |300      |205 |
 | |
| |8 |      TABLE SCAN             |t2      |300      |205 |
 | |
| ==========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [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.c1], [t2.c2], [t2.c3]), filter(nil)
 | |
|   6 - (#keys=1, [t2.c2]), output([t2.c1], [t2.c2], [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
 | |
|       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")
 | |
|       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 |MERGE JOIN                 |             |490      |1585|
 | |
| |1 | PX COORDINATOR MERGE SORT |             |500      |1122|
 | |
| |2 |  EXCHANGE OUT DISTR       |:EX10000     |500      |1074|
 | |
| |3 |   SORT                    |             |500      |1074|
 | |
| |4 |    PX PARTITION ITERATOR  |             |500      |342 |
 | |
| |5 |     TABLE SCAN            |t1(idx_t1_c2)|500      |342 |
 | |
| |6 | TABLE SCAN                |t1           |100      |90  |
 | |
| =============================================================
 | |
| 
 | |
| 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.c1], [t1.c2]), filter(nil), sort_keys([t1.c2, ASC])
 | |
|   2 - output([t1.c1], [t1.c2]), filter(nil), dop=1
 | |
|   3 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c2, ASC]), local merge sort
 | |
|   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])
 | |
|   6 - output([t1.a], [t1.b]), filter(nil), 
 | |
|       access([t1.a], [t1.b]), partitions(p0)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "hint.t1"@"SEL$1" ))
 | |
|       USE_MERGE(@"SEL$1" ("hint.t1"@"SEL$1" ))
 | |
|       INDEX(@"SEL$1" "opt.t1"@"SEL$1" "idx_t1_c2")
 | |
|       FULL(@"SEL$1" "hint.t1"@"SEL$1")
 | |
|       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 |MERGE JOIN                 |             |490      |1585|
 | |
| |1 | PX COORDINATOR MERGE SORT |             |500      |1122|
 | |
| |2 |  EXCHANGE OUT DISTR       |:EX10000     |500      |1074|
 | |
| |3 |   SORT                    |             |500      |1074|
 | |
| |4 |    PX PARTITION ITERATOR  |             |500      |342 |
 | |
| |5 |     TABLE SCAN            |t1(idx_t1_c2)|500      |342 |
 | |
| |6 | TABLE SCAN                |t1           |100      |90  |
 | |
| =============================================================
 | |
| 
 | |
| 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.c1], [t1.c2]), filter(nil), sort_keys([t1.c2, ASC])
 | |
|   2 - output([t1.c1], [t1.c2]), filter(nil), dop=1
 | |
|   3 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c2, ASC]), local merge sort
 | |
|   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])
 | |
|   6 - output([t1.a], [t1.b]), filter(nil), 
 | |
|       access([t1.a], [t1.b]), partitions(p0)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "hint.t1"@"SEL$1" ))
 | |
|       USE_MERGE(@"SEL$1" ("hint.t1"@"SEL$1" ))
 | |
|       INDEX(@"SEL$1" "opt.t1"@"SEL$1" "idx_t1_c2")
 | |
|       FULL(@"SEL$1" "hint.t1"@"SEL$1")
 | |
|       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 |MERGE JOIN                 |             |490      |1585|
 | |
| |1 | PX COORDINATOR MERGE SORT |             |500      |1122|
 | |
| |2 |  EXCHANGE OUT DISTR       |:EX10000     |500      |1074|
 | |
| |3 |   SORT                    |             |500      |1074|
 | |
| |4 |    PX PARTITION ITERATOR  |             |500      |342 |
 | |
| |5 |     TABLE SCAN            |t1(idx_t1_c2)|500      |342 |
 | |
| |6 | TABLE SCAN                |t1           |100      |90  |
 | |
| =============================================================
 | |
| 
 | |
| 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.c1], [t1.c2]), filter(nil), sort_keys([t1.c2, ASC])
 | |
|   2 - output([t1.c1], [t1.c2]), filter(nil), dop=1
 | |
|   3 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c2, ASC]), local merge sort
 | |
|   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])
 | |
|   6 - output([t1.a], [t1.b]), filter(nil), 
 | |
|       access([t1.a], [t1.b]), partitions(p0)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "hint.t1"@"SEL$1" ))
 | |
|       USE_MERGE(@"SEL$1" ("hint.t1"@"SEL$1" ))
 | |
|       INDEX(@"SEL$1" "opt.t1"@"SEL$1" "idx_t1_c2")
 | |
|       FULL(@"SEL$1" "hint.t1"@"SEL$1")
 | |
|       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 |MERGE JOIN                 |             |490      |1585|
 | |
| |1 | TABLE SCAN                |t1           |100      |90  |
 | |
| |2 | PX COORDINATOR MERGE SORT |             |500      |1122|
 | |
| |3 |  EXCHANGE OUT DISTR       |:EX10000     |500      |1074|
 | |
| |4 |   SORT                    |             |500      |1074|
 | |
| |5 |    PX PARTITION ITERATOR  |             |500      |342 |
 | |
| |6 |     TABLE SCAN            |t1(idx_t1_c2)|500      |342 |
 | |
| =============================================================
 | |
| 
 | |
| 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), sort_keys([t1.c2, ASC])
 | |
|   3 - output([t1.c1], [t1.c2]), filter(nil), dop=1
 | |
|   4 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c2, ASC]), local merge sort
 | |
|   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])
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("hint.t1"@"SEL$1" "opt.t1"@"SEL$1" ))
 | |
|       USE_MERGE(@"SEL$1" ("opt.t1"@"SEL$1" ))
 | |
|       FULL(@"SEL$1" "hint.t1"@"SEL$1")
 | |
|       INDEX(@"SEL$1" "opt.t1"@"SEL$1" "idx_t1_c2")
 | |
|       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      |811 |
 | |
| |1 | EXCHANGE OUT DISTR          |:EX10001     |100      |792 |
 | |
| |2 |  HASH JOIN                  |             |100      |792 |
 | |
| |3 |   EXCHANGE IN DISTR         |             |100      |100 |
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)|:EX10000     |100      |90  |
 | |
| |5 |     TABLE SCAN              |tb           |100      |90  |
 | |
| |6 |   PX PARTITION ITERATOR     |             |500      |342 |
 | |
| |7 |    TABLE SCAN               |ta(idx_t1_c2)|500      |342 |
 | |
| ===============================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([ta.c1], [ta.c2], [tb.a], [tb.b]), filter(nil)
 | |
|   1 - output([ta.c1], [ta.c2], [tb.a], [tb.b]), filter(nil), dop=1
 | |
|   2 - output([ta.c1], [ta.c2], [tb.a], [tb.b]), 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
 | |
|       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")
 | |
|       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      |811 |
 | |
| |1 | EXCHANGE OUT DISTR          |:EX10001     |100      |792 |
 | |
| |2 |  HASH JOIN                  |             |100      |792 |
 | |
| |3 |   EXCHANGE IN DISTR         |             |100      |100 |
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)|:EX10000     |100      |90  |
 | |
| |5 |     TABLE SCAN              |tb           |100      |90  |
 | |
| |6 |   PX PARTITION ITERATOR     |             |500      |342 |
 | |
| |7 |    TABLE SCAN               |ta(idx_t1_c2)|500      |342 |
 | |
| ===============================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([ta.c1], [ta.c2], [tb.a], [tb.b]), filter(nil)
 | |
|   1 - output([ta.c1], [ta.c2], [tb.a], [tb.b]), filter(nil), dop=1
 | |
|   2 - output([ta.c1], [ta.c2], [tb.a], [tb.b]), 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
 | |
|       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")
 | |
|       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      |1334|
 | |
| |1 | EXCHANGE OUT DISTR          |:EX10001|100      |1316|
 | |
| |2 |  MERGE JOIN                 |        |100      |1316|
 | |
| |3 |   EXCHANGE IN DISTR         |        |100      |100 |
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)|:EX10000|100      |90  |
 | |
| |5 |     TABLE SCAN              |tb      |100      |90  |
 | |
| |6 |   SORT                      |        |500      |1074|
 | |
| |7 |    PX PARTITION ITERATOR    |        |500      |342 |
 | |
| |8 |     TABLE SCAN              |ta      |500      |342 |
 | |
| ==========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([ta.c1], [ta.c2], [tb.a], [tb.b]), filter(nil)
 | |
|   1 - output([ta.c1], [ta.c2], [tb.a], [tb.b]), filter(nil), dop=1
 | |
|   2 - output([ta.c1], [ta.c2], [tb.a], [tb.b]), 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), sort_keys([ta.c1, ASC]), local merge sort
 | |
|   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])
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("hint.tb"@"SEL$1" "opt.ta"@"SEL$1" ))
 | |
|       USE_MERGE(@"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")
 | |
|       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      |1334|
 | |
| |1 | EXCHANGE OUT DISTR          |:EX10001|100      |1316|
 | |
| |2 |  MERGE JOIN                 |        |100      |1316|
 | |
| |3 |   EXCHANGE IN DISTR         |        |100      |100 |
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)|:EX10000|100      |90  |
 | |
| |5 |     TABLE SCAN              |tb      |100      |90  |
 | |
| |6 |   SORT                      |        |500      |1074|
 | |
| |7 |    PX PARTITION ITERATOR    |        |500      |342 |
 | |
| |8 |     TABLE SCAN              |ta      |500      |342 |
 | |
| ==========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([ta.c1], [ta.c2], [tb.a], [tb.b]), filter(nil)
 | |
|   1 - output([ta.c1], [ta.c2], [tb.a], [tb.b]), filter(nil), dop=1
 | |
|   2 - output([ta.c1], [ta.c2], [tb.a], [tb.b]), 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), sort_keys([ta.c1, ASC]), local merge sort
 | |
|   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])
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("hint.tb"@"SEL$1" "opt.ta"@"SEL$1" ))
 | |
|       USE_MERGE(@"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")
 | |
|       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      |1334|
 | |
| |1 | EXCHANGE OUT DISTR          |:EX10001|100      |1316|
 | |
| |2 |  MERGE JOIN                 |        |100      |1316|
 | |
| |3 |   EXCHANGE IN DISTR         |        |100      |100 |
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)|:EX10000|100      |90  |
 | |
| |5 |     TABLE SCAN              |tb      |100      |90  |
 | |
| |6 |   SORT                      |        |500      |1074|
 | |
| |7 |    PX PARTITION ITERATOR    |        |500      |342 |
 | |
| |8 |     TABLE SCAN              |ta      |500      |342 |
 | |
| ==========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([ta.c1], [ta.c2], [tb.a], [tb.b]), filter(nil)
 | |
|   1 - output([ta.c1], [ta.c2], [tb.a], [tb.b]), filter(nil), dop=1
 | |
|   2 - output([ta.c1], [ta.c2], [tb.a], [tb.b]), 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), sort_keys([ta.c1, ASC]), local merge sort
 | |
|   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])
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("hint.tb"@"SEL$1" "opt.ta"@"SEL$1" ))
 | |
|       USE_MERGE(@"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")
 | |
|       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      |1334|
 | |
| |1 | EXCHANGE OUT DISTR          |:EX10001|100      |1316|
 | |
| |2 |  MERGE JOIN                 |        |100      |1316|
 | |
| |3 |   EXCHANGE IN DISTR         |        |100      |100 |
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)|:EX10000|100      |90  |
 | |
| |5 |     TABLE SCAN              |tb      |100      |90  |
 | |
| |6 |   SORT                      |        |500      |1074|
 | |
| |7 |    PX PARTITION ITERATOR    |        |500      |342 |
 | |
| |8 |     TABLE SCAN              |ta      |500      |342 |
 | |
| ==========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([ta.c1], [ta.c2], [tb.a], [tb.b]), filter(nil)
 | |
|   1 - output([ta.c1], [ta.c2], [tb.a], [tb.b]), filter(nil), dop=1
 | |
|   2 - output([ta.c1], [ta.c2], [tb.a], [tb.b]), 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), sort_keys([ta.c1, ASC]), local merge sort
 | |
|   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])
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("hint.tb"@"SEL$1" "opt.ta"@"SEL$1" ))
 | |
|       USE_MERGE(@"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")
 | |
|       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      |1334|
 | |
| |1 | EXCHANGE OUT DISTR          |:EX10001|100      |1316|
 | |
| |2 |  MERGE JOIN                 |        |100      |1316|
 | |
| |3 |   SORT                      |        |500      |1074|
 | |
| |4 |    PX PARTITION ITERATOR    |        |500      |342 |
 | |
| |5 |     TABLE SCAN              |ta      |500      |342 |
 | |
| |6 |   EXCHANGE IN DISTR         |        |100      |100 |
 | |
| |7 |    EXCHANGE OUT DISTR (PKEY)|:EX10000|100      |90  |
 | |
| |8 |     TABLE SCAN              |tb      |100      |90  |
 | |
| ==========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([ta.c1], [ta.c2], [tb.a], [tb.b]), filter(nil)
 | |
|   1 - output([ta.c1], [ta.c2], [tb.a], [tb.b]), filter(nil), dop=1
 | |
|   2 - output([ta.c1], [ta.c2], [tb.a], [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
 | |
|       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")
 | |
|       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      |1334|
 | |
| |1 | EXCHANGE OUT DISTR          |:EX10001|100      |1316|
 | |
| |2 |  MERGE JOIN                 |        |100      |1316|
 | |
| |3 |   SORT                      |        |500      |1074|
 | |
| |4 |    PX PARTITION ITERATOR    |        |500      |342 |
 | |
| |5 |     TABLE SCAN              |ta      |500      |342 |
 | |
| |6 |   EXCHANGE IN DISTR         |        |100      |100 |
 | |
| |7 |    EXCHANGE OUT DISTR (PKEY)|:EX10000|100      |90  |
 | |
| |8 |     TABLE SCAN              |tb      |100      |90  |
 | |
| ==========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([ta.c1], [ta.c2], [tb.a], [tb.b]), filter(nil)
 | |
|   1 - output([ta.c1], [ta.c2], [tb.a], [tb.b]), filter(nil), dop=1
 | |
|   2 - output([ta.c1], [ta.c2], [tb.a], [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
 | |
|       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")
 | |
|       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      |1847|
 | |
| |1 | EXCHANGE OUT DISTR          |:EX10001    |100      |1828|
 | |
| |2 |  MERGE JOIN                 |            |100      |1828|
 | |
| |3 |   SORT                      |            |500      |1074|
 | |
| |4 |    PX PARTITION ITERATOR    |            |500      |342 |
 | |
| |5 |     TABLE SCAN              |t1          |500      |342 |
 | |
| |6 |   EXCHANGE IN DISTR         |            |100      |613 |
 | |
| |7 |    EXCHANGE OUT DISTR (PKEY)|:EX10000    |100      |603 |
 | |
| |8 |     TABLE SCAN              |t1(idx_t1_a)|100      |603 |
 | |
| ==============================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t1.a], [t1.b]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t1.a], [t1.b]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t1.a], [t1.b]), filter(nil), 
 | |
|       equal_conds([t1.c1 = t1.a]), other_conds(nil)
 | |
|   3 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   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])
 | |
|   6 - output([t1.a], [t1.b]), filter(nil)
 | |
|   7 - (#keys=1, [t1.a]), output([t1.a], [t1.b]), filter(nil), is_single, dop=1
 | |
|   8 - output([t1.a], [t1.b]), filter(nil), 
 | |
|       access([t1.a], [t1.b]), partitions(p0)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "hint.t1"@"SEL$1" ))
 | |
|       USE_MERGE(@"SEL$1" ("hint.t1"@"SEL$1" ))
 | |
|       PQ_DISTRIBUTE(@"SEL$1" ("hint.t1"@"SEL$1" ) NONE PARTITION)
 | |
|       FULL(@"SEL$1" "opt.t1"@"SEL$1")
 | |
|       INDEX(@"SEL$1" "hint.t1"@"SEL$1" "idx_t1_a")
 | |
|       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      |1847|
 | |
| |1 | EXCHANGE OUT DISTR          |:EX10001    |100      |1828|
 | |
| |2 |  MERGE JOIN                 |            |100      |1828|
 | |
| |3 |   SORT                      |            |500      |1074|
 | |
| |4 |    PX PARTITION ITERATOR    |            |500      |342 |
 | |
| |5 |     TABLE SCAN              |t1          |500      |342 |
 | |
| |6 |   EXCHANGE IN DISTR         |            |100      |613 |
 | |
| |7 |    EXCHANGE OUT DISTR (PKEY)|:EX10000    |100      |603 |
 | |
| |8 |     TABLE SCAN              |t1(idx_t1_a)|100      |603 |
 | |
| ==============================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t1.a], [t1.b]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t1.a], [t1.b]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t1.a], [t1.b]), filter(nil), 
 | |
|       equal_conds([t1.c1 = t1.a]), other_conds(nil)
 | |
|   3 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   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])
 | |
|   6 - output([t1.a], [t1.b]), filter(nil)
 | |
|   7 - (#keys=1, [t1.a]), output([t1.a], [t1.b]), filter(nil), is_single, dop=1
 | |
|   8 - output([t1.a], [t1.b]), filter(nil), 
 | |
|       access([t1.a], [t1.b]), partitions(p0)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "hint.t1"@"SEL$1" ))
 | |
|       USE_MERGE(@"SEL$1" ("hint.t1"@"SEL$1" ))
 | |
|       PQ_DISTRIBUTE(@"SEL$1" ("hint.t1"@"SEL$1" ) NONE PARTITION)
 | |
|       FULL(@"SEL$1" "opt.t1"@"SEL$1")
 | |
|       INDEX(@"SEL$1" "hint.t1"@"SEL$1" "idx_t1_a")
 | |
|       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      |1847|
 | |
| |1 | EXCHANGE OUT DISTR          |:EX10001    |100      |1828|
 | |
| |2 |  MERGE JOIN                 |            |100      |1828|
 | |
| |3 |   SORT                      |            |500      |1074|
 | |
| |4 |    PX PARTITION ITERATOR    |            |500      |342 |
 | |
| |5 |     TABLE SCAN              |t1          |500      |342 |
 | |
| |6 |   EXCHANGE IN DISTR         |            |100      |613 |
 | |
| |7 |    EXCHANGE OUT DISTR (PKEY)|:EX10000    |100      |603 |
 | |
| |8 |     TABLE SCAN              |t1(idx_t1_a)|100      |603 |
 | |
| ==============================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t1.a], [t1.b]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t1.a], [t1.b]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t1.a], [t1.b]), filter(nil), 
 | |
|       equal_conds([t1.c1 = t1.a]), other_conds(nil)
 | |
|   3 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   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])
 | |
|   6 - output([t1.a], [t1.b]), filter(nil)
 | |
|   7 - (#keys=1, [t1.a]), output([t1.a], [t1.b]), filter(nil), is_single, dop=1
 | |
|   8 - output([t1.a], [t1.b]), filter(nil), 
 | |
|       access([t1.a], [t1.b]), partitions(p0)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "hint.t1"@"SEL$1" ))
 | |
|       USE_MERGE(@"SEL$1" ("hint.t1"@"SEL$1" ))
 | |
|       PQ_DISTRIBUTE(@"SEL$1" ("hint.t1"@"SEL$1" ) NONE PARTITION)
 | |
|       FULL(@"SEL$1" "opt.t1"@"SEL$1")
 | |
|       INDEX(@"SEL$1" "hint.t1"@"SEL$1" "idx_t1_a")
 | |
|       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_c3)|1        |101 |
 | |
| ============================================
 | |
| 
 | |
| 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
 | |
|       INDEX(@"SEL$1" "opt.t4"@"SEL$1" "idx_t4_c3")
 | |
|       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  |1        |101 |
 | |
| ===================================
 | |
| 
 | |
| 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")
 | |
|       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(idx_t4_c2_c3)|1        |101 |
 | |
| ===============================================
 | |
| 
 | |
| 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
 | |
|       INDEX(@"SEL$1" "opt.t4"@"SEL$1" "idx_t4_c2_c3")
 | |
|       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 |    |100      |269 |
 | |
| |1 | TABLE SCAN|t4  |100      |92  |
 | |
| |2 | TABLE SCAN|t1  |100      |90  |
 | |
| ====================================
 | |
| 
 | |
| 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
 | |
|       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")
 | |
|       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 |    |100      |269 |
 | |
| |1 | TABLE SCAN|ta  |100      |92  |
 | |
| |2 | TABLE SCAN|tb  |100      |90  |
 | |
| ====================================
 | |
| 
 | |
| 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
 | |
|       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")
 | |
|       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      |431 |
 | |
| |1 | EXCHANGE OUT DISTR    |:EX10000     |500      |384 |
 | |
| |2 |  PX PARTITION ITERATOR|             |500      |384 |
 | |
| |3 |   TABLE SCAN          |t1(idx_t1_c2)|500      |384 |
 | |
| =========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2]), filter(nil)
 | |
|   1 - output([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")
 | |
|       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 |    |100      |269 |
 | |
| |1 | TABLE SCAN|ta  |100      |92  |
 | |
| |2 | TABLE SCAN|tb  |100      |90  |
 | |
| ====================================
 | |
| 
 | |
| 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
 | |
|       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")
 | |
|       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        |947 |
 | |
| |1 | PX COORDINATOR                |             |5        |38  |
 | |
| |2 |  EXCHANGE OUT DISTR           |:EX10000     |5        |37  |
 | |
| |3 |   PX PARTITION ITERATOR       |             |5        |37  |
 | |
| |4 |    TABLE SCAN                 |t1(idx_t1_c2)|5        |37  |
 | |
| |5 | PX COORDINATOR                |             |100      |909 |
 | |
| |6 |  EXCHANGE OUT DISTR           |:EX20001     |100      |895 |
 | |
| |7 |   MERGE JOIN                  |             |100      |895 |
 | |
| |8 |    SORT                       |             |100      |227 |
 | |
| |9 |     EXCHANGE IN DISTR         |             |100      |100 |
 | |
| |10|      EXCHANGE OUT DISTR (PKEY)|:EX20000     |100      |90  |
 | |
| |11|       TABLE SCAN              |t1           |100      |90  |
 | |
| |12|    SORT                       |             |300      |554 |
 | |
| |13|     PX PARTITION ITERATOR     |             |300      |192 |
 | |
| |14|      TABLE SCAN               |t2           |300      |192 |
 | |
| =================================================================
 | |
| 
 | |
| 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), sort_keys([t1.b, ASC])
 | |
|   9 - output([t1.b], [t1.a]), filter(nil)
 | |
|   10 - (#keys=1, [t1.b]), output([t1.b], [t1.a]), filter(nil), is_single, dop=1
 | |
|   11 - output([t1.b], [t1.a]), filter(nil), 
 | |
|       access([t1.b], [t1.a]), partitions(p0)
 | |
|   12 - output([t2.c1]), filter(nil), sort_keys([t2.c1, ASC]), local merge sort
 | |
|   13 - output([t2.c1]), filter(nil)
 | |
|   14 - 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")
 | |
|       LEADING(@"SEL$2" ("hint.t1"@"SEL$2" "opt.t2"@"SEL$2" ))
 | |
|       USE_MERGE(@"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")
 | |
|       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 |MERGE JOIN                 |                |490      |1764|
 | |
| |1 | MERGE JOIN                |                |100      |269 |
 | |
| |2 |  TABLE SCAN               |t4(idx_t4_c2_c3)|100      |92  |
 | |
| |3 |  TABLE SCAN               |t1              |100      |90  |
 | |
| |4 | PX COORDINATOR MERGE SORT |                |500      |1122|
 | |
| |5 |  EXCHANGE OUT DISTR       |:EX10000        |500      |1074|
 | |
| |6 |   SORT                    |                |500      |1074|
 | |
| |7 |    PX PARTITION ITERATOR  |                |500      |342 |
 | |
| |8 |     TABLE SCAN            |t1(idx_t1_c2)   |500      |342 |
 | |
| ================================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.a], [t1.b], [t4.c1], [t4.c2], [t4.c3], [t1.c1], [t1.c2]), filter(nil), 
 | |
|       equal_conds([t1.a = t1.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.c2], [t4.c1], [t4.c3]), filter(nil), 
 | |
|       access([t4.c2], [t4.c1], [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), sort_keys([t1.c2, ASC])
 | |
|   5 - output([t1.c1], [t1.c2]), filter(nil), dop=1
 | |
|   6 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c2, 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
 | |
|       LEADING(@"SEL$1" (("opt.t4"@"SEL$1" "hint.t1"@"SEL$1" )"opt.t1"@"SEL$1" ))
 | |
|       USE_MERGE(@"SEL$1" ("opt.t1"@"SEL$1" ))
 | |
|       USE_MERGE(@"SEL$1" ("hint.t1"@"SEL$1" ))
 | |
|       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")
 | |
|       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 |MERGE JOIN                 |                |490      |1764|
 | |
| |1 | MERGE JOIN                |                |100      |269 |
 | |
| |2 |  TABLE SCAN               |t4(idx_t4_c2_c3)|100      |92  |
 | |
| |3 |  TABLE SCAN               |t1              |100      |90  |
 | |
| |4 | PX COORDINATOR MERGE SORT |                |500      |1122|
 | |
| |5 |  EXCHANGE OUT DISTR       |:EX10000        |500      |1074|
 | |
| |6 |   SORT                    |                |500      |1074|
 | |
| |7 |    PX PARTITION ITERATOR  |                |500      |342 |
 | |
| |8 |     TABLE SCAN            |ta(idx_t1_c2)   |500      |342 |
 | |
| ================================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.a], [t1.b], [t4.c1], [t4.c2], [t4.c3], [ta.c1], [ta.c2]), filter(nil), 
 | |
|       equal_conds([t1.a = ta.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.c2], [t4.c1], [t4.c3]), filter(nil), 
 | |
|       access([t4.c2], [t4.c1], [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), sort_keys([ta.c2, ASC])
 | |
|   5 - output([ta.c1], [ta.c2]), filter(nil), dop=1
 | |
|   6 - output([ta.c1], [ta.c2]), filter(nil), sort_keys([ta.c2, ASC]), local merge sort
 | |
|   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])
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" (("opt.t4"@"SEL$1" "hint.t1"@"SEL$1" )"opt.ta"@"SEL$1" ))
 | |
|       USE_MERGE(@"SEL$1" ("opt.ta"@"SEL$1" ))
 | |
|       USE_MERGE(@"SEL$1" ("hint.t1"@"SEL$1" ))
 | |
|       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")
 | |
|       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 |MERGE JOIN                 |                |490      |1764|
 | |
| |1 | MERGE JOIN                |                |100      |269 |
 | |
| |2 |  TABLE SCAN               |t4(idx_t4_c2_c3)|100      |92  |
 | |
| |3 |  TABLE SCAN               |t1              |100      |90  |
 | |
| |4 | PX COORDINATOR MERGE SORT |                |500      |1122|
 | |
| |5 |  EXCHANGE OUT DISTR       |:EX10000        |500      |1074|
 | |
| |6 |   SORT                    |                |500      |1074|
 | |
| |7 |    PX PARTITION ITERATOR  |                |500      |342 |
 | |
| |8 |     TABLE SCAN            |ta(idx_t1_c2)   |500      |342 |
 | |
| ================================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.a], [t1.b], [t4.c1], [t4.c2], [t4.c3], [ta.c1], [ta.c2]), filter(nil), 
 | |
|       equal_conds([t1.a = ta.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.c2], [t4.c1], [t4.c3]), filter(nil), 
 | |
|       access([t4.c2], [t4.c1], [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), sort_keys([ta.c2, ASC])
 | |
|   5 - output([ta.c1], [ta.c2]), filter(nil), dop=1
 | |
|   6 - output([ta.c1], [ta.c2]), filter(nil), sort_keys([ta.c2, ASC]), local merge sort
 | |
|   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])
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" (("opt.t4"@"SEL$1" "hint.t1"@"SEL$1" )"opt.ta"@"SEL$1" ))
 | |
|       USE_MERGE(@"SEL$1" ("opt.ta"@"SEL$1" ))
 | |
|       USE_MERGE(@"SEL$1" ("hint.t1"@"SEL$1" ))
 | |
|       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")
 | |
|       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      |1649|
 | |
| |1 | EXCHANGE OUT DISTR            |:EX10001|300      |1536|
 | |
| |2 |  MERGE JOIN                   |        |300      |1536|
 | |
| |3 |   EXCHANGE IN MERGE SORT DISTR|        |500      |389 |
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)  |:EX10000|500      |342 |
 | |
| |5 |     PX PARTITION ITERATOR     |        |500      |342 |
 | |
| |6 |      TABLE SCAN               |ta      |500      |342 |
 | |
| |7 |   SORT                        |        |300      |859 |
 | |
| |8 |    PX PARTITION ITERATOR      |        |300      |205 |
 | |
| |9 |     TABLE SCAN                |tb      |300      |205 |
 | |
| ============================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3]), filter(nil)
 | |
|   1 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3]), filter(nil), dop=1
 | |
|   2 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3]), filter(nil), 
 | |
|       equal_conds([ta.c1 = tb.c1]), other_conds(nil)
 | |
|   3 - output([ta.c1], [ta.c2]), filter(nil), sort_keys([ta.c1, ASC]), Local Order
 | |
|   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), sort_keys([tb.c1, ASC]), local merge sort
 | |
|   8 - output([tb.c1], [tb.c2], [tb.c3]), filter(nil)
 | |
|   9 - 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
 | |
|       LEADING(@"SEL$1" ("opt.ta"@"SEL$1" "opt.tb"@"SEL$1" ))
 | |
|       USE_MERGE(@"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")
 | |
|       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               |        |290      |1651|
 | |
| |1 | EXCHANGE OUT DISTR          |:EX10001|290      |1541|
 | |
| |2 |  HASH JOIN                  |        |290      |1541|
 | |
| |3 |   PX PARTITION ITERATOR     |        |500      |342 |
 | |
| |4 |    TABLE SCAN               |t1      |500      |342 |
 | |
| |5 |   EXCHANGE IN DISTR         |        |300      |290 |
 | |
| |6 |    EXCHANGE OUT DISTR (PKEY)|:EX10000|300      |205 |
 | |
| |7 |     PX PARTITION ITERATOR   |        |300      |205 |
 | |
| |8 |      TABLE SCAN             |t2      |300      |205 |
 | |
| ==========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [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.c1], [t2.c2], [t2.c3]), filter(nil)
 | |
|   6 - (#keys=1, [t2.c2]), output([t2.c1], [t2.c2], [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
 | |
|       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")
 | |
|       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                |        |100      |1462|
 | |
| |1 | EXCHANGE OUT DISTR           |:EX10001|100      |1443|
 | |
| |2 |  MERGE JOIN                  |        |100      |1443|
 | |
| |3 |   SORT                       |        |500      |1074|
 | |
| |4 |    PX PARTITION ITERATOR     |        |500      |342 |
 | |
| |5 |     TABLE SCAN               |t1      |500      |342 |
 | |
| |6 |   SORT                       |        |100      |227 |
 | |
| |7 |    EXCHANGE IN DISTR         |        |100      |100 |
 | |
| |8 |     EXCHANGE OUT DISTR (PKEY)|:EX10000|100      |90  |
 | |
| |9 |      TABLE SCAN              |t2      |100      |90  |
 | |
| ===========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t2.a], [t2.b]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t2.a], [t2.b]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t2.a], [t2.b]), filter(nil), 
 | |
|       equal_conds([t1.c1 = t2.b]), other_conds(nil)
 | |
|   3 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   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])
 | |
|   6 - output([t2.a], [t2.b]), filter(nil), sort_keys([t2.b, ASC])
 | |
|   7 - output([t2.b], [t2.a]), filter(nil)
 | |
|   8 - (#keys=1, [t2.b]), output([t2.b], [t2.a]), filter(nil), is_single, dop=1
 | |
|   9 - output([t2.b], [t2.a]), filter(nil), 
 | |
|       access([t2.b], [t2.a]), partitions(p0)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "hint.t2"@"SEL$1" ))
 | |
|       USE_MERGE(@"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")
 | |
|       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      |1649|
 | |
| |1 | EXCHANGE OUT DISTR            |:EX10001|300      |1536|
 | |
| |2 |  MERGE JOIN                   |        |300      |1536|
 | |
| |3 |   EXCHANGE IN MERGE SORT DISTR|        |500      |389 |
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)  |:EX10000|500      |342 |
 | |
| |5 |     PX PARTITION ITERATOR     |        |500      |342 |
 | |
| |6 |      TABLE SCAN               |ta      |500      |342 |
 | |
| |7 |   SORT                        |        |300      |859 |
 | |
| |8 |    PX PARTITION ITERATOR      |        |300      |205 |
 | |
| |9 |     TABLE SCAN                |tb      |300      |205 |
 | |
| ============================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3]), filter(nil)
 | |
|   1 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3]), filter(nil), dop=1
 | |
|   2 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3]), filter(nil), 
 | |
|       equal_conds([ta.c1 = tb.c1]), other_conds(nil)
 | |
|   3 - output([ta.c1], [ta.c2]), filter(nil), sort_keys([ta.c1, ASC]), Local Order
 | |
|   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), sort_keys([tb.c1, ASC]), local merge sort
 | |
|   8 - output([tb.c1], [tb.c2], [tb.c3]), filter(nil)
 | |
|   9 - 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
 | |
|       LEADING(@"SEL$1" ("opt.ta"@"SEL$1" "opt.tb"@"SEL$1" ))
 | |
|       USE_MERGE(@"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")
 | |
|       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      |1649|
 | |
| |1 | EXCHANGE OUT DISTR            |:EX10001|300      |1536|
 | |
| |2 |  MERGE JOIN                   |        |300      |1536|
 | |
| |3 |   EXCHANGE IN MERGE SORT DISTR|        |500      |389 |
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)  |:EX10000|500      |342 |
 | |
| |5 |     PX PARTITION ITERATOR     |        |500      |342 |
 | |
| |6 |      TABLE SCAN               |ta      |500      |342 |
 | |
| |7 |   SORT                        |        |300      |859 |
 | |
| |8 |    PX PARTITION ITERATOR      |        |300      |205 |
 | |
| |9 |     TABLE SCAN                |tb      |300      |205 |
 | |
| ============================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3]), filter(nil)
 | |
|   1 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3]), filter(nil), dop=1
 | |
|   2 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3]), filter(nil), 
 | |
|       equal_conds([ta.c1 = tb.c1]), other_conds(nil)
 | |
|   3 - output([ta.c1], [ta.c2]), filter(nil), sort_keys([ta.c1, ASC]), Local Order
 | |
|   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), sort_keys([tb.c1, ASC]), local merge sort
 | |
|   8 - output([tb.c1], [tb.c2], [tb.c3]), filter(nil)
 | |
|   9 - 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
 | |
|       LEADING(@"SEL$1" ("opt.ta"@"SEL$1" "opt.tb"@"SEL$1" ))
 | |
|       USE_MERGE(@"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")
 | |
|       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                |        |290      |2410|
 | |
| |1 | EXCHANGE OUT DISTR           |:EX10001|290      |2300|
 | |
| |2 |  MERGE JOIN                  |        |290      |2300|
 | |
| |3 |   SORT                       |        |300      |944 |
 | |
| |4 |    EXCHANGE IN DISTR         |        |300      |290 |
 | |
| |5 |     EXCHANGE OUT DISTR (PKEY)|:EX10000|300      |205 |
 | |
| |6 |      PX PARTITION ITERATOR   |        |300      |205 |
 | |
| |7 |       TABLE SCAN             |t2      |300      |205 |
 | |
| |8 |   SORT                       |        |500      |1074|
 | |
| |9 |    PX PARTITION ITERATOR     |        |500      |342 |
 | |
| |10|     TABLE SCAN               |t1      |500      |342 |
 | |
| ===========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), 
 | |
|       equal_conds([t1.c1 = t2.c2]), other_conds(nil)
 | |
|   3 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), sort_keys([t2.c2, ASC])
 | |
|   4 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil)
 | |
|   5 - (#keys=1, [t2.c2]), output([t2.c1], [t2.c2], [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
 | |
|       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")
 | |
|       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                |        |290      |2410|
 | |
| |1 | EXCHANGE OUT DISTR           |:EX10001|290      |2300|
 | |
| |2 |  MERGE JOIN                  |        |290      |2300|
 | |
| |3 |   SORT                       |        |300      |944 |
 | |
| |4 |    EXCHANGE IN DISTR         |        |300      |290 |
 | |
| |5 |     EXCHANGE OUT DISTR (PKEY)|:EX10000|300      |205 |
 | |
| |6 |      PX PARTITION ITERATOR   |        |300      |205 |
 | |
| |7 |       TABLE SCAN             |t2      |300      |205 |
 | |
| |8 |   SORT                       |        |500      |1074|
 | |
| |9 |    PX PARTITION ITERATOR     |        |500      |342 |
 | |
| |10|     TABLE SCAN               |t1      |500      |342 |
 | |
| ===========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), 
 | |
|       equal_conds([t1.c1 = t2.c2]), other_conds(nil)
 | |
|   3 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil), sort_keys([t2.c2, ASC])
 | |
|   4 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil)
 | |
|   5 - (#keys=1, [t2.c2]), output([t2.c1], [t2.c2], [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
 | |
|       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")
 | |
|       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                |        |100      |1462|
 | |
| |1 | EXCHANGE OUT DISTR           |:EX10001|100      |1443|
 | |
| |2 |  MERGE JOIN                  |        |100      |1443|
 | |
| |3 |   SORT                       |        |500      |1074|
 | |
| |4 |    PX PARTITION ITERATOR     |        |500      |342 |
 | |
| |5 |     TABLE SCAN               |t1      |500      |342 |
 | |
| |6 |   SORT                       |        |100      |227 |
 | |
| |7 |    EXCHANGE IN DISTR         |        |100      |100 |
 | |
| |8 |     EXCHANGE OUT DISTR (PKEY)|:EX10000|100      |90  |
 | |
| |9 |      TABLE SCAN              |t2      |100      |90  |
 | |
| ===========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t2.a], [t2.b]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t2.a], [t2.b]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t2.a], [t2.b]), filter(nil), 
 | |
|       equal_conds([t1.c1 = t2.b]), other_conds(nil)
 | |
|   3 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   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])
 | |
|   6 - output([t2.a], [t2.b]), filter(nil), sort_keys([t2.b, ASC])
 | |
|   7 - output([t2.b], [t2.a]), filter(nil)
 | |
|   8 - (#keys=1, [t2.b]), output([t2.b], [t2.a]), filter(nil), is_single, dop=1
 | |
|   9 - output([t2.b], [t2.a]), filter(nil), 
 | |
|       access([t2.b], [t2.a]), partitions(p0)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "hint.t2"@"SEL$1" ))
 | |
|       USE_MERGE(@"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")
 | |
|       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                |        |100      |1462|
 | |
| |1 | EXCHANGE OUT DISTR           |:EX10001|100      |1443|
 | |
| |2 |  MERGE JOIN                  |        |100      |1443|
 | |
| |3 |   SORT                       |        |500      |1074|
 | |
| |4 |    PX PARTITION ITERATOR     |        |500      |342 |
 | |
| |5 |     TABLE SCAN               |t1      |500      |342 |
 | |
| |6 |   SORT                       |        |100      |227 |
 | |
| |7 |    EXCHANGE IN DISTR         |        |100      |100 |
 | |
| |8 |     EXCHANGE OUT DISTR (PKEY)|:EX10000|100      |90  |
 | |
| |9 |      TABLE SCAN              |t2      |100      |90  |
 | |
| ===========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t2.a], [t2.b]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t2.a], [t2.b]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t2.a], [t2.b]), filter(nil), 
 | |
|       equal_conds([t1.c1 = t2.b]), other_conds(nil)
 | |
|   3 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   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])
 | |
|   6 - output([t2.a], [t2.b]), filter(nil), sort_keys([t2.b, ASC])
 | |
|   7 - output([t2.b], [t2.a]), filter(nil)
 | |
|   8 - (#keys=1, [t2.b]), output([t2.b], [t2.a]), filter(nil), is_single, dop=1
 | |
|   9 - output([t2.b], [t2.a]), filter(nil), 
 | |
|       access([t2.b], [t2.a]), partitions(p0)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "hint.t2"@"SEL$1" ))
 | |
|       USE_MERGE(@"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")
 | |
|       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                         |             |33       |3891|
 | |
| |1 | SORT                              |             |98       |3627|
 | |
| |2 |  MERGE JOIN                       |             |98       |3351|
 | |
| |3 |   PX COORDINATOR MERGE SORT       |             |490      |3121|
 | |
| |4 |    EXCHANGE OUT DISTR             |:EX10001     |490      |2936|
 | |
| |5 |     SORT                          |             |490      |2936|
 | |
| |6 |      MERGE JOIN                   |             |490      |1648|
 | |
| |7 |       EXCHANGE IN MERGE SORT DISTR|             |500      |389 |
 | |
| |8 |        EXCHANGE OUT DISTR (PKEY)  |:EX10000     |500      |342 |
 | |
| |9 |         PX PARTITION ITERATOR     |             |500      |342 |
 | |
| |10|          TABLE SCAN               |ta(idx_t1_c2)|500      |342 |
 | |
| |11|       SORT                        |             |300      |859 |
 | |
| |12|        PX PARTITION ITERATOR      |             |300      |205 |
 | |
| |13|         TABLE SCAN                |tb           |300      |205 |
 | |
| |14|   TABLE SCAN                      |tc           |100      |90  |
 | |
| |15| SORT                              |             |100      |217 |
 | |
| |16|  TABLE SCAN                       |td           |100      |90  |
 | |
| =====================================================================
 | |
| 
 | |
| 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.b], [td.a]), filter(nil), 
 | |
|       access([td.b], [td.a]), partitions(p0)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       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" ))
 | |
|       USE_MERGE(@"SEL$1" ("opt.tb"@"SEL$1" ))
 | |
|       PQ_DISTRIBUTE(@"SEL$1" ("opt.tb"@"SEL$1" ) PARTITION NONE)
 | |
|       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")
 | |
|       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               |             |33       |39941|
 | |
| |1 | NESTED-LOOP JOIN              |             |98       |36932|
 | |
| |2 |  PX COORDINATOR               |             |490      |18942|
 | |
| |3 |   EXCHANGE OUT DISTR          |:EX10001     |490      |18757|
 | |
| |4 |    NESTED-LOOP JOIN           |             |490      |18757|
 | |
| |5 |     EXCHANGE IN DISTR         |             |500      |389  |
 | |
| |6 |      EXCHANGE OUT DISTR (PKEY)|:EX10000     |500      |342  |
 | |
| |7 |       PX PARTITION ITERATOR   |             |500      |342  |
 | |
| |8 |        TABLE SCAN             |ta(idx_t1_c2)|500      |342  |
 | |
| |9 |     PX PARTITION ITERATOR     |             |1        |36   |
 | |
| |10|      TABLE GET                |tb           |1        |36   |
 | |
| |11|  TABLE GET                    |tc           |1        |36   |
 | |
| |12| MATERIAL                      |             |100      |127  |
 | |
| |13|  TABLE SCAN                   |td           |100      |90   |
 | |
| ==================================================================
 | |
| 
 | |
| 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.b], [td.a]), filter(nil), 
 | |
|       access([td.b], [td.a]), partitions(p0)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       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" ) BC2HOST NONE)
 | |
|       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" ))
 | |
|       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")
 | |
|       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                        |             |33       |2540|
 | |
| |1 | TABLE SCAN                      |td           |100      |90  |
 | |
| |2 | HASH JOIN                       |             |98       |2271|
 | |
| |3 |  TABLE SCAN                     |tc           |100      |90  |
 | |
| |4 |  PX COORDINATOR                 |             |490      |1834|
 | |
| |5 |   EXCHANGE OUT DISTR            |:EX10001     |490      |1648|
 | |
| |6 |    MERGE JOIN                   |             |490      |1648|
 | |
| |7 |     EXCHANGE IN MERGE SORT DISTR|             |500      |389 |
 | |
| |8 |      EXCHANGE OUT DISTR (PKEY)  |:EX10000     |500      |342 |
 | |
| |9 |       PX PARTITION ITERATOR     |             |500      |342 |
 | |
| |10|        TABLE SCAN               |ta(idx_t1_c2)|500      |342 |
 | |
| |11|     SORT                        |             |300      |859 |
 | |
| |12|      PX PARTITION ITERATOR      |             |300      |205 |
 | |
| |13|       TABLE SCAN                |tb           |300      |205 |
 | |
| ===================================================================
 | |
| 
 | |
| 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([td.b], [td.a]), filter(nil), 
 | |
|       access([td.b], [td.a]), partitions(p0)
 | |
|   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([tc.a], [tc.b]), filter(nil), 
 | |
|       access([tc.a], [tc.b]), partitions(p0)
 | |
|   4 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3]), filter(nil)
 | |
|   5 - output([ta.c1], [ta.c2], [tb.c1], [tb.c2], [tb.c3]), filter(nil), dop=1
 | |
|   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])
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("hint.td"@"SEL$1" ("hint.tc"@"SEL$1" ("opt.ta"@"SEL$1" "opt.tb"@"SEL$1" ))))
 | |
|       USE_HASH(@"SEL$1" ("hint.tc"@"SEL$1" "opt.ta"@"SEL$1" "opt.tb"@"SEL$1" ))
 | |
|       FULL(@"SEL$1" "hint.td"@"SEL$1")
 | |
|       USE_HASH(@"SEL$1" ("opt.ta"@"SEL$1" "opt.tb"@"SEL$1" ))
 | |
|       FULL(@"SEL$1" "hint.tc"@"SEL$1")
 | |
|       USE_MERGE(@"SEL$1" ("opt.tb"@"SEL$1" ))
 | |
|       PQ_DISTRIBUTE(@"SEL$1" ("opt.tb"@"SEL$1" ) PARTITION NONE)
 | |
|       INDEX(@"SEL$1" "opt.ta"@"SEL$1" "idx_t1_c2")
 | |
|       FULL(@"SEL$1" "opt.tb"@"SEL$1")
 | |
|       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                        |             |33       |3593|
 | |
| |1 | HASH JOIN                       |             |98       |3182|
 | |
| |2 |  PX COORDINATOR                 |             |490      |1834|
 | |
| |3 |   EXCHANGE OUT DISTR            |:EX10001     |490      |1648|
 | |
| |4 |    MERGE JOIN                   |             |490      |1648|
 | |
| |5 |     EXCHANGE IN MERGE SORT DISTR|             |500      |389 |
 | |
| |6 |      EXCHANGE OUT DISTR (PKEY)  |:EX10000     |500      |342 |
 | |
| |7 |       PX PARTITION ITERATOR     |             |500      |342 |
 | |
| |8 |        TABLE SCAN               |ta(idx_t1_c2)|500      |342 |
 | |
| |9 |     SORT                        |             |300      |859 |
 | |
| |10|      PX PARTITION ITERATOR      |             |300      |205 |
 | |
| |11|       TABLE SCAN                |tb           |300      |205 |
 | |
| |12|  TABLE SCAN                     |tc           |100      |90  |
 | |
| |13| TABLE SCAN                      |td           |100      |90  |
 | |
| ===================================================================
 | |
| 
 | |
| 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), sort_keys([ta.c2, ASC]), Local Order
 | |
|   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), sort_keys([tb.c1, ASC]), local merge sort
 | |
|   10 - output([tb.c1], [tb.c2], [tb.c3]), filter(nil)
 | |
|   11 - output([tb.c1], [tb.c2], [tb.c3]), filter(nil), 
 | |
|       access([tb.c1], [tb.c2], [tb.c3]), partitions(p[0-2])
 | |
|   12 - output([tc.a], [tc.b]), filter(nil), 
 | |
|       access([tc.a], [tc.b]), partitions(p0)
 | |
|   13 - output([td.b], [td.a]), filter(nil), 
 | |
|       access([td.b], [td.a]), partitions(p0)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       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" ))
 | |
|       USE_MERGE(@"SEL$1" ("opt.tb"@"SEL$1" ))
 | |
|       PQ_DISTRIBUTE(@"SEL$1" ("opt.tb"@"SEL$1" ) PARTITION NONE)
 | |
|       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")
 | |
|       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      |1649|
 | |
| |1 | EXCHANGE OUT DISTR            |:EX10001|300      |1536|
 | |
| |2 |  MERGE JOIN                   |        |300      |1536|
 | |
| |3 |   EXCHANGE IN MERGE SORT DISTR|        |500      |389 |
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)  |:EX10000|500      |342 |
 | |
| |5 |     PX PARTITION ITERATOR     |        |500      |342 |
 | |
| |6 |      TABLE SCAN               |t1      |500      |342 |
 | |
| |7 |   SORT                        |        |300      |859 |
 | |
| |8 |    PX PARTITION ITERATOR      |        |300      |205 |
 | |
| |9 |     TABLE SCAN                |t2      |300      |205 |
 | |
| ============================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), 
 | |
|       equal_conds([t1.c1 = t2.c1]), other_conds(nil)
 | |
|   3 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), Local Order
 | |
|   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), sort_keys([t2.c1, ASC]), local merge sort
 | |
|   8 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil)
 | |
|   9 - 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
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "opt.t2"@"SEL$1" ))
 | |
|       USE_MERGE(@"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")
 | |
|       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      |1649|
 | |
| |1 | EXCHANGE OUT DISTR            |:EX10001|300      |1536|
 | |
| |2 |  MERGE JOIN                   |        |300      |1536|
 | |
| |3 |   SORT                        |        |300      |859 |
 | |
| |4 |    PX PARTITION ITERATOR      |        |300      |205 |
 | |
| |5 |     TABLE SCAN                |t2      |300      |205 |
 | |
| |6 |   EXCHANGE IN MERGE SORT DISTR|        |500      |389 |
 | |
| |7 |    EXCHANGE OUT DISTR (PKEY)  |:EX10000|500      |342 |
 | |
| |8 |     PX PARTITION ITERATOR     |        |500      |342 |
 | |
| |9 |      TABLE SCAN               |t1      |500      |342 |
 | |
| ============================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), 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
 | |
|       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")
 | |
|       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      |1649|
 | |
| |1 | EXCHANGE OUT DISTR            |:EX10001|300      |1536|
 | |
| |2 |  MERGE JOIN                   |        |300      |1536|
 | |
| |3 |   SORT                        |        |300      |859 |
 | |
| |4 |    PX PARTITION ITERATOR      |        |300      |205 |
 | |
| |5 |     TABLE SCAN                |t2      |300      |205 |
 | |
| |6 |   EXCHANGE IN MERGE SORT DISTR|        |500      |389 |
 | |
| |7 |    EXCHANGE OUT DISTR (PKEY)  |:EX10000|500      |342 |
 | |
| |8 |     PX PARTITION ITERATOR     |        |500      |342 |
 | |
| |9 |      TABLE SCAN               |t1      |500      |342 |
 | |
| ============================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), 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
 | |
|       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")
 | |
|       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      |1649|
 | |
| |1 | EXCHANGE OUT DISTR            |:EX10001|300      |1536|
 | |
| |2 |  MERGE JOIN                   |        |300      |1536|
 | |
| |3 |   EXCHANGE IN MERGE SORT DISTR|        |500      |389 |
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)  |:EX10000|500      |342 |
 | |
| |5 |     PX PARTITION ITERATOR     |        |500      |342 |
 | |
| |6 |      TABLE SCAN               |t1      |500      |342 |
 | |
| |7 |   SORT                        |        |300      |859 |
 | |
| |8 |    PX PARTITION ITERATOR      |        |300      |205 |
 | |
| |9 |     TABLE SCAN                |t2      |300      |205 |
 | |
| ============================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), 
 | |
|       equal_conds([t1.c1 = t2.c1]), other_conds(nil)
 | |
|   3 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), Local Order
 | |
|   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), sort_keys([t2.c1, ASC]), local merge sort
 | |
|   8 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil)
 | |
|   9 - 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
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "opt.t2"@"SEL$1" ))
 | |
|       USE_MERGE(@"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")
 | |
|       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                        |        |58       |2152|
 | |
| |1 | MERGE JOIN                      |        |60       |1830|
 | |
| |2 |  PX COORDINATOR MERGE SORT      |        |300      |1649|
 | |
| |3 |   EXCHANGE OUT DISTR            |:EX10001|300      |1536|
 | |
| |4 |    MERGE JOIN                   |        |300      |1536|
 | |
| |5 |     EXCHANGE IN MERGE SORT DISTR|        |500      |389 |
 | |
| |6 |      EXCHANGE OUT DISTR (PKEY)  |:EX10000|500      |342 |
 | |
| |7 |       PX PARTITION ITERATOR     |        |500      |342 |
 | |
| |8 |        TABLE SCAN               |t1      |500      |342 |
 | |
| |9 |     SORT                        |        |300      |859 |
 | |
| |10|      PX PARTITION ITERATOR      |        |300      |205 |
 | |
| |11|       TABLE SCAN                |t2      |300      |205 |
 | |
| |12|  TABLE SCAN                     |ha      |100      |90  |
 | |
| |13| TABLE SCAN                      |hb      |100      |90  |
 | |
| ==============================================================
 | |
| 
 | |
| 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), 
 | |
|       equal_conds([t1.c1 = t2.c1]), other_conds(nil)
 | |
|   5 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), Local Order
 | |
|   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), sort_keys([t2.c1, ASC]), local merge sort
 | |
|   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.b], [hb.a]), filter(nil), 
 | |
|       access([hb.b], [hb.a]), partitions(p0)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       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" ))
 | |
|       USE_MERGE(@"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$1" "hint.ha"@"SEL$1")
 | |
|       FULL(@"SEL$1" "hint.hb"@"SEL$1")
 | |
|       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                 |        |58       |3740|
 | |
| |1 | MERGE JOIN                      |        |60       |1830|
 | |
| |2 |  PX COORDINATOR MERGE SORT      |        |300      |1649|
 | |
| |3 |   EXCHANGE OUT DISTR            |:EX10001|300      |1536|
 | |
| |4 |    MERGE JOIN                   |        |300      |1536|
 | |
| |5 |     EXCHANGE IN MERGE SORT DISTR|        |500      |389 |
 | |
| |6 |      EXCHANGE OUT DISTR (PKEY)  |:EX10000|500      |342 |
 | |
| |7 |       PX PARTITION ITERATOR     |        |500      |342 |
 | |
| |8 |        TABLE SCAN               |t1      |500      |342 |
 | |
| |9 |     SORT                        |        |300      |859 |
 | |
| |10|      PX PARTITION ITERATOR      |        |300      |205 |
 | |
| |11|       TABLE SCAN                |t2      |300      |205 |
 | |
| |12|  TABLE SCAN                     |ha      |100      |90  |
 | |
| |13| MATERIAL                        |        |100      |127 |
 | |
| |14|  TABLE SCAN                     |hb      |100      |90  |
 | |
| ==============================================================
 | |
| 
 | |
| 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), 
 | |
|       equal_conds([t1.c1 = t2.c1]), other_conds(nil)
 | |
|   5 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), Local Order
 | |
|   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), sort_keys([t2.c1, ASC]), local merge sort
 | |
|   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.b], [hb.a]), filter(nil), 
 | |
|       access([hb.b], [hb.a]), partitions(p0)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       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" ))
 | |
|       USE_MERGE(@"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$1" "hint.ha"@"SEL$1")
 | |
|       FULL(@"SEL$1" "hint.hb"@"SEL$1")
 | |
|       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                        |        |58       |2102|
 | |
| |1 | TABLE SCAN                      |hb      |100      |90  |
 | |
| |2 | MERGE JOIN                      |        |60       |1830|
 | |
| |3 |  PX COORDINATOR MERGE SORT      |        |300      |1649|
 | |
| |4 |   EXCHANGE OUT DISTR            |:EX10001|300      |1536|
 | |
| |5 |    MERGE JOIN                   |        |300      |1536|
 | |
| |6 |     EXCHANGE IN MERGE SORT DISTR|        |500      |389 |
 | |
| |7 |      EXCHANGE OUT DISTR (PKEY)  |:EX10000|500      |342 |
 | |
| |8 |       PX PARTITION ITERATOR     |        |500      |342 |
 | |
| |9 |        TABLE SCAN               |t1      |500      |342 |
 | |
| |10|     SORT                        |        |300      |859 |
 | |
| |11|      PX PARTITION ITERATOR      |        |300      |205 |
 | |
| |12|       TABLE SCAN                |t2      |300      |205 |
 | |
| |13|  TABLE SCAN                     |ha      |100      |90  |
 | |
| ==============================================================
 | |
| 
 | |
| 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([hb.b], [hb.a]), filter(nil), 
 | |
|       access([hb.b], [hb.a]), partitions(p0)
 | |
|   2 - 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)
 | |
|   3 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), sort_keys([t1.c1, ASC])
 | |
|   4 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1
 | |
|   5 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), 
 | |
|       equal_conds([t1.c1 = t2.c1]), other_conds(nil)
 | |
|   6 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), Local Order
 | |
|   7 - (#keys=1, [t1.c1]), output([t1.c1], [t1.c2]), filter(nil), dop=1
 | |
|   8 - output([t1.c1], [t1.c2]), filter(nil)
 | |
|   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), sort_keys([t2.c1, ASC]), local merge sort
 | |
|   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])
 | |
|   13 - output([ha.a], [ha.b]), filter(nil), 
 | |
|       access([ha.a], [ha.b]), partitions(p0)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("hint.hb"@"SEL$1" (("opt.t1"@"SEL$1" "opt.t2"@"SEL$1" )"hint.ha"@"SEL$1" )))
 | |
|       USE_HASH(@"SEL$1" ("opt.t1"@"SEL$1" "opt.t2"@"SEL$1" "hint.ha"@"SEL$1" ))
 | |
|       FULL(@"SEL$1" "hint.hb"@"SEL$1")
 | |
|       USE_MERGE(@"SEL$1" ("hint.ha"@"SEL$1" ))
 | |
|       USE_MERGE(@"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$1" "hint.ha"@"SEL$1")
 | |
|       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      |1649|
 | |
| |1 | EXCHANGE OUT DISTR            |:EX10001|300      |1536|
 | |
| |2 |  MERGE JOIN                   |        |300      |1536|
 | |
| |3 |   EXCHANGE IN MERGE SORT DISTR|        |500      |389 |
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)  |:EX10000|500      |342 |
 | |
| |5 |     PX PARTITION ITERATOR     |        |500      |342 |
 | |
| |6 |      TABLE SCAN               |t1      |500      |342 |
 | |
| |7 |   SORT                        |        |300      |859 |
 | |
| |8 |    PX PARTITION ITERATOR      |        |300      |205 |
 | |
| |9 |     TABLE SCAN                |t2      |300      |205 |
 | |
| ============================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), 
 | |
|       equal_conds([t1.c1 = t2.c1]), other_conds(nil)
 | |
|   3 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), Local Order
 | |
|   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), sort_keys([t2.c1, ASC]), local merge sort
 | |
|   8 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil)
 | |
|   9 - 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
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "opt.t2"@"SEL$1" ))
 | |
|       USE_MERGE(@"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")
 | |
|       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      |1649|
 | |
| |1 | EXCHANGE OUT DISTR            |:EX10001|300      |1536|
 | |
| |2 |  MERGE JOIN                   |        |300      |1536|
 | |
| |3 |   SORT                        |        |300      |859 |
 | |
| |4 |    PX PARTITION ITERATOR      |        |300      |205 |
 | |
| |5 |     TABLE SCAN                |t2      |300      |205 |
 | |
| |6 |   EXCHANGE IN MERGE SORT DISTR|        |500      |389 |
 | |
| |7 |    EXCHANGE OUT DISTR (PKEY)  |:EX10000|500      |342 |
 | |
| |8 |     PX PARTITION ITERATOR     |        |500      |342 |
 | |
| |9 |      TABLE SCAN               |t1      |500      |342 |
 | |
| ============================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), 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
 | |
|       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")
 | |
|       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      |1649|
 | |
| |1 | EXCHANGE OUT DISTR            |:EX10001|300      |1536|
 | |
| |2 |  MERGE JOIN                   |        |300      |1536|
 | |
| |3 |   SORT                        |        |300      |859 |
 | |
| |4 |    PX PARTITION ITERATOR      |        |300      |205 |
 | |
| |5 |     TABLE SCAN                |t2      |300      |205 |
 | |
| |6 |   EXCHANGE IN MERGE SORT DISTR|        |500      |389 |
 | |
| |7 |    EXCHANGE OUT DISTR (PKEY)  |:EX10000|500      |342 |
 | |
| |8 |     PX PARTITION ITERATOR     |        |500      |342 |
 | |
| |9 |      TABLE SCAN               |t1      |500      |342 |
 | |
| ============================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), 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
 | |
|       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")
 | |
|       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      |1649|
 | |
| |1 | EXCHANGE OUT DISTR            |:EX10001|300      |1536|
 | |
| |2 |  MERGE JOIN                   |        |300      |1536|
 | |
| |3 |   EXCHANGE IN MERGE SORT DISTR|        |500      |389 |
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)  |:EX10000|500      |342 |
 | |
| |5 |     PX PARTITION ITERATOR     |        |500      |342 |
 | |
| |6 |      TABLE SCAN               |t1      |500      |342 |
 | |
| |7 |   SORT                        |        |300      |859 |
 | |
| |8 |    PX PARTITION ITERATOR      |        |300      |205 |
 | |
| |9 |     TABLE SCAN                |t2      |300      |205 |
 | |
| ============================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), 
 | |
|       equal_conds([t1.c1 = t2.c1]), other_conds(nil)
 | |
|   3 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), Local Order
 | |
|   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), sort_keys([t2.c1, ASC]), local merge sort
 | |
|   8 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil)
 | |
|   9 - 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
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "opt.t2"@"SEL$1" ))
 | |
|       USE_MERGE(@"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")
 | |
|       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      |1649|
 | |
| |1 | EXCHANGE OUT DISTR            |:EX10001|300      |1536|
 | |
| |2 |  MERGE JOIN                   |        |300      |1536|
 | |
| |3 |   EXCHANGE IN MERGE SORT DISTR|        |500      |389 |
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)  |:EX10000|500      |342 |
 | |
| |5 |     PX PARTITION ITERATOR     |        |500      |342 |
 | |
| |6 |      TABLE SCAN               |t1      |500      |342 |
 | |
| |7 |   SORT                        |        |300      |859 |
 | |
| |8 |    PX PARTITION ITERATOR      |        |300      |205 |
 | |
| |9 |     TABLE SCAN                |t2      |300      |205 |
 | |
| ============================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), 
 | |
|       equal_conds([t1.c1 = t2.c1]), other_conds(nil)
 | |
|   3 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), Local Order
 | |
|   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), sort_keys([t2.c1, ASC]), local merge sort
 | |
|   8 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil)
 | |
|   9 - 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
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "opt.t2"@"SEL$1" ))
 | |
|       USE_MERGE(@"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")
 | |
|       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      |1649|
 | |
| |1 | EXCHANGE OUT DISTR            |:EX10001|300      |1536|
 | |
| |2 |  MERGE JOIN                   |        |300      |1536|
 | |
| |3 |   EXCHANGE IN MERGE SORT DISTR|        |500      |389 |
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)  |:EX10000|500      |342 |
 | |
| |5 |     PX PARTITION ITERATOR     |        |500      |342 |
 | |
| |6 |      TABLE SCAN               |t1      |500      |342 |
 | |
| |7 |   SORT                        |        |300      |859 |
 | |
| |8 |    PX PARTITION ITERATOR      |        |300      |205 |
 | |
| |9 |     TABLE SCAN                |t2      |300      |205 |
 | |
| ============================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), 
 | |
|       equal_conds([t1.c1 = t2.c1]), other_conds(nil)
 | |
|   3 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), Local Order
 | |
|   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), sort_keys([t2.c1, ASC]), local merge sort
 | |
|   8 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil)
 | |
|   9 - 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
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "opt.t2"@"SEL$1" ))
 | |
|       USE_MERGE(@"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")
 | |
|       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      |1649|
 | |
| |1 | EXCHANGE OUT DISTR            |:EX10001|300      |1536|
 | |
| |2 |  MERGE JOIN                   |        |300      |1536|
 | |
| |3 |   EXCHANGE IN MERGE SORT DISTR|        |500      |389 |
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)  |:EX10000|500      |342 |
 | |
| |5 |     PX PARTITION ITERATOR     |        |500      |342 |
 | |
| |6 |      TABLE SCAN               |t1      |500      |342 |
 | |
| |7 |   SORT                        |        |300      |859 |
 | |
| |8 |    PX PARTITION ITERATOR      |        |300      |205 |
 | |
| |9 |     TABLE SCAN                |t2      |300      |205 |
 | |
| ============================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2], [t2.c3]), filter(nil), 
 | |
|       equal_conds([t1.c1 = t2.c1]), other_conds(nil)
 | |
|   3 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), Local Order
 | |
|   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), sort_keys([t2.c1, ASC]), local merge sort
 | |
|   8 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil)
 | |
|   9 - 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
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "opt.t2"@"SEL$1" ))
 | |
|       USE_MERGE(@"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")
 | |
|       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                        |        |58       |2152|
 | |
| |1 | MERGE JOIN                      |        |60       |1830|
 | |
| |2 |  PX COORDINATOR MERGE SORT      |        |300      |1649|
 | |
| |3 |   EXCHANGE OUT DISTR            |:EX10001|300      |1536|
 | |
| |4 |    MERGE JOIN                   |        |300      |1536|
 | |
| |5 |     EXCHANGE IN MERGE SORT DISTR|        |500      |389 |
 | |
| |6 |      EXCHANGE OUT DISTR (PKEY)  |:EX10000|500      |342 |
 | |
| |7 |       PX PARTITION ITERATOR     |        |500      |342 |
 | |
| |8 |        TABLE SCAN               |t1      |500      |342 |
 | |
| |9 |     SORT                        |        |300      |859 |
 | |
| |10|      PX PARTITION ITERATOR      |        |300      |205 |
 | |
| |11|       TABLE SCAN                |t2      |300      |205 |
 | |
| |12|  TABLE SCAN                     |ha      |100      |90  |
 | |
| |13| TABLE SCAN                      |hb      |100      |90  |
 | |
| ==============================================================
 | |
| 
 | |
| 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), 
 | |
|       equal_conds([t1.c1 = t2.c1]), other_conds(nil)
 | |
|   5 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), Local Order
 | |
|   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), sort_keys([t2.c1, ASC]), local merge sort
 | |
|   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.b], [hb.a]), filter(nil), 
 | |
|       access([hb.b], [hb.a]), partitions(p0)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       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" ))
 | |
|       USE_MERGE(@"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$1" "hint.ha"@"SEL$1")
 | |
|       FULL(@"SEL$1" "hint.hb"@"SEL$1")
 | |
|       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                        |        |58       |2152|
 | |
| |1 | MERGE JOIN                      |        |60       |1830|
 | |
| |2 |  PX COORDINATOR MERGE SORT      |        |300      |1649|
 | |
| |3 |   EXCHANGE OUT DISTR            |:EX10001|300      |1536|
 | |
| |4 |    MERGE JOIN                   |        |300      |1536|
 | |
| |5 |     EXCHANGE IN MERGE SORT DISTR|        |500      |389 |
 | |
| |6 |      EXCHANGE OUT DISTR (PKEY)  |:EX10000|500      |342 |
 | |
| |7 |       PX PARTITION ITERATOR     |        |500      |342 |
 | |
| |8 |        TABLE SCAN               |t1      |500      |342 |
 | |
| |9 |     SORT                        |        |300      |859 |
 | |
| |10|      PX PARTITION ITERATOR      |        |300      |205 |
 | |
| |11|       TABLE SCAN                |t2      |300      |205 |
 | |
| |12|  TABLE SCAN                     |ha      |100      |90  |
 | |
| |13| TABLE SCAN                      |hb      |100      |90  |
 | |
| ==============================================================
 | |
| 
 | |
| 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), 
 | |
|       equal_conds([t1.c1 = t2.c1]), other_conds(nil)
 | |
|   5 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), Local Order
 | |
|   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), sort_keys([t2.c1, ASC]), local merge sort
 | |
|   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.b], [hb.a]), filter(nil), 
 | |
|       access([hb.b], [hb.a]), partitions(p0)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       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" ))
 | |
|       USE_MERGE(@"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$1" "hint.ha"@"SEL$1")
 | |
|       FULL(@"SEL$1" "hint.hb"@"SEL$1")
 | |
|       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 |10636543|
 | |
| |1 | NESTED-LOOP JOIN CARTESIAN|             |30000    |21507   |
 | |
| |2 |  PX COORDINATOR           |             |300      |206     |
 | |
| |3 |   EXCHANGE OUT DISTR      |:EX10000     |300      |192     |
 | |
| |4 |    PX PARTITION ITERATOR  |             |300      |192     |
 | |
| |5 |     TABLE SCAN            |t2           |300      |192     |
 | |
| |6 |  MATERIAL                 |             |100      |73      |
 | |
| |7 |   TABLE SCAN              |t4(idx_t4_c2)|100      |54      |
 | |
| |8 | MATERIAL                  |             |500      |446     |
 | |
| |9 |  PX COORDINATOR           |             |500      |354     |
 | |
| |10|   EXCHANGE OUT DISTR      |:EX20000     |500      |331     |
 | |
| |11|    PX PARTITION ITERATOR  |             |500      |331     |
 | |
| |12|     TABLE SCAN            |t1           |500      |331     |
 | |
| =================================================================
 | |
| 
 | |
| 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([1]), filter(nil)
 | |
|   7 - output([1]), filter(nil), 
 | |
|       access([t4.c2]), 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
 | |
|       LEADING(@"SEL$1" (("opt.t2"@"SEL$1" "opt.t4"@"SEL$1" )"opt.t1"@"SEL$1" ))
 | |
|       USE_NL(@"SEL$1" ("opt.t1"@"SEL$1" ))
 | |
|       USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t1"@"SEL$1" ))
 | |
|       USE_NL(@"SEL$1" ("opt.t4"@"SEL$1" ))
 | |
|       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")
 | |
|       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 |10636579|
 | |
| |1 | NESTED-LOOP JOIN CARTESIAN|        |30000    |21543   |
 | |
| |2 |  PX COORDINATOR           |        |300      |206     |
 | |
| |3 |   EXCHANGE OUT DISTR      |:EX10000|300      |192     |
 | |
| |4 |    PX PARTITION ITERATOR  |        |300      |192     |
 | |
| |5 |     TABLE SCAN            |t2      |300      |192     |
 | |
| |6 |  MATERIAL                 |        |100      |109     |
 | |
| |7 |   TABLE SCAN              |t4      |100      |90      |
 | |
| |8 | MATERIAL                  |        |500      |446     |
 | |
| |9 |  PX COORDINATOR           |        |500      |354     |
 | |
| |10|   EXCHANGE OUT DISTR      |:EX20000|500      |331     |
 | |
| |11|    PX PARTITION ITERATOR  |        |500      |331     |
 | |
| |12|     TABLE SCAN            |t1      |500      |331     |
 | |
| ============================================================
 | |
| 
 | |
| 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([1]), filter(nil)
 | |
|   7 - output([1]), 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
 | |
|       LEADING(@"SEL$1" (("opt.t2"@"SEL$1" "opt.t4"@"SEL$1" )"opt.t1"@"SEL$1" ))
 | |
|       USE_NL(@"SEL$1" ("opt.t1"@"SEL$1" ))
 | |
|       USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t1"@"SEL$1" ))
 | |
|       USE_NL(@"SEL$1" ("opt.t4"@"SEL$1" ))
 | |
|       USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t4"@"SEL$1" ))
 | |
|       FULL(@"SEL$1" "opt.t2"@"SEL$1")
 | |
|       FULL(@"SEL$1" "opt.t4"@"SEL$1")
 | |
|       FULL(@"SEL$1" "opt.t1"@"SEL$1")
 | |
|       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 |10640719|
 | |
| |1 | SUBPLAN SCAN               |v       |30000    |25684   |
 | |
| |2 |  NESTED-LOOP JOIN CARTESIAN|        |30000    |21543   |
 | |
| |3 |   PX COORDINATOR           |        |300      |206     |
 | |
| |4 |    EXCHANGE OUT DISTR      |:EX10000|300      |192     |
 | |
| |5 |     PX PARTITION ITERATOR  |        |300      |192     |
 | |
| |6 |      TABLE SCAN            |t2      |300      |192     |
 | |
| |7 |   MATERIAL                 |        |100      |109     |
 | |
| |8 |    TABLE SCAN              |t4      |100      |90      |
 | |
| |9 | MATERIAL                   |        |500      |446     |
 | |
| |10|  PX COORDINATOR            |        |500      |354     |
 | |
| |11|   EXCHANGE OUT DISTR       |:EX20000|500      |331     |
 | |
| |12|    PX PARTITION ITERATOR   |        |500      |331     |
 | |
| |13|     TABLE SCAN             |t1      |500      |331     |
 | |
| =============================================================
 | |
| 
 | |
| 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([t2.c1]), filter(nil)
 | |
|   4 - output([t2.c1]), filter(nil), dop=1
 | |
|   5 - output([t2.c1]), filter(nil)
 | |
|   6 - output([t2.c1]), filter(nil), 
 | |
|       access([t2.c1]), partitions(p[0-2])
 | |
|   7 - output([1]), filter(nil)
 | |
|   8 - output([1]), filter(nil), 
 | |
|       access([t4.c1]), partitions(p0)
 | |
|   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
 | |
|       LEADING(@"SEL$1" ("v"@"SEL$1" "opt.t1"@"SEL$1" ))
 | |
|       USE_NL(@"SEL$1" ("opt.t1"@"SEL$1" ))
 | |
|       USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t1"@"SEL$1" ))
 | |
|       LEADING(@"SEL$2" ("opt.t2"@"SEL$2" "opt.t4"@"SEL$2" ))
 | |
|       USE_NL(@"SEL$2" ("opt.t4"@"SEL$2" ))
 | |
|       USE_NL_MATERIALIZATION(@"SEL$2" ("opt.t4"@"SEL$2" ))
 | |
|       FULL(@"SEL$2" "opt.t2"@"SEL$2")
 | |
|       FULL(@"SEL$2" "opt.t4"@"SEL$2")
 | |
|       FULL(@"SEL$1" "opt.t1"@"SEL$1")
 | |
|       NO_REWRITE
 | |
|       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 |10636543|
 | |
| |1 | NESTED-LOOP JOIN CARTESIAN|             |30000    |21507   |
 | |
| |2 |  PX COORDINATOR           |             |300      |206     |
 | |
| |3 |   EXCHANGE OUT DISTR      |:EX10000     |300      |192     |
 | |
| |4 |    PX PARTITION ITERATOR  |             |300      |192     |
 | |
| |5 |     TABLE SCAN            |t2           |300      |192     |
 | |
| |6 |  MATERIAL                 |             |100      |73      |
 | |
| |7 |   TABLE SCAN              |t4(idx_t4_c2)|100      |54      |
 | |
| |8 | MATERIAL                  |             |500      |446     |
 | |
| |9 |  PX COORDINATOR           |             |500      |354     |
 | |
| |10|   EXCHANGE OUT DISTR      |:EX20000     |500      |331     |
 | |
| |11|    PX PARTITION ITERATOR  |             |500      |331     |
 | |
| |12|     TABLE SCAN            |t1           |500      |331     |
 | |
| =================================================================
 | |
| 
 | |
| 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([1]), filter(nil)
 | |
|   7 - output([1]), filter(nil), 
 | |
|       access([t4.c2]), 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
 | |
|       LEADING(@"SEL$1" (("opt.t2"@"SEL$1" "opt.t4"@"SEL$1" )"opt.t1"@"SEL$1" ))
 | |
|       USE_NL(@"SEL$1" ("opt.t1"@"SEL$1" ))
 | |
|       USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t1"@"SEL$1" ))
 | |
|       USE_NL(@"SEL$1" ("opt.t4"@"SEL$1" ))
 | |
|       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")
 | |
|       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 |10636543|
 | |
| |1 | NESTED-LOOP JOIN CARTESIAN|             |30000    |21507   |
 | |
| |2 |  PX COORDINATOR           |             |300      |206     |
 | |
| |3 |   EXCHANGE OUT DISTR      |:EX10000     |300      |192     |
 | |
| |4 |    PX PARTITION ITERATOR  |             |300      |192     |
 | |
| |5 |     TABLE SCAN            |t2           |300      |192     |
 | |
| |6 |  MATERIAL                 |             |100      |73      |
 | |
| |7 |   TABLE SCAN              |t4(idx_t4_c2)|100      |54      |
 | |
| |8 | MATERIAL                  |             |500      |446     |
 | |
| |9 |  PX COORDINATOR           |             |500      |354     |
 | |
| |10|   EXCHANGE OUT DISTR      |:EX20000     |500      |331     |
 | |
| |11|    PX PARTITION ITERATOR  |             |500      |331     |
 | |
| |12|     TABLE SCAN            |t1           |500      |331     |
 | |
| =================================================================
 | |
| 
 | |
| 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]), 
 | |
|       hint(read_consistency:2)
 | |
|   6 - output([1]), filter(nil)
 | |
|   7 - output([1]), filter(nil), 
 | |
|       access([t4.c2]), partitions(p0), 
 | |
|       hint(read_consistency: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]), 
 | |
|       hint(read_consistency:2)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" (("opt.t2"@"SEL$1" "opt.t4"@"SEL$1" )"opt.t1"@"SEL$1" ))
 | |
|       USE_NL(@"SEL$1" ("opt.t1"@"SEL$1" ))
 | |
|       USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t1"@"SEL$1" ))
 | |
|       USE_NL(@"SEL$1" ("opt.t4"@"SEL$1" ))
 | |
|       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")
 | |
|       READ_CONSISTENCY("WEAK")
 | |
|       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    |        |50000    |39601|
 | |
| |1 | PX COORDINATOR               |        |100      |3774 |
 | |
| |2 |  EXCHANGE OUT DISTR          |:EX10001|100      |3764 |
 | |
| |3 |   NESTED-LOOP JOIN           |        |100      |3764 |
 | |
| |4 |    EXCHANGE IN DISTR         |        |100      |95   |
 | |
| |5 |     EXCHANGE OUT DISTR (PKEY)|:EX10000|100      |90   |
 | |
| |6 |      TABLE SCAN              |t4      |100      |90   |
 | |
| |7 |    PX PARTITION ITERATOR     |        |1        |36   |
 | |
| |8 |     TABLE GET                |t2      |1        |36   |
 | |
| |9 | MATERIAL                     |        |500      |446  |
 | |
| |10|  PX COORDINATOR              |        |500      |354  |
 | |
| |11|   EXCHANGE OUT DISTR         |:EX20000|500      |331  |
 | |
| |12|    PX PARTITION ITERATOR     |        |500      |331  |
 | |
| |13|     TABLE SCAN               |t1      |500      |331  |
 | |
| ============================================================
 | |
| 
 | |
| 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([t4.c1], [PARTITION_ID]), filter(nil)
 | |
|   5 - (#keys=1, [t4.c1]), output([t4.c1], [PARTITION_ID]), 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
 | |
|       LEADING(@"SEL$1" (("opt.t4"@"SEL$1" "opt.t2"@"SEL$1" )"opt.t1"@"SEL$1" ))
 | |
|       USE_NL(@"SEL$1" ("opt.t1"@"SEL$1" ))
 | |
|       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")
 | |
|       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      |1472|
 | |
| |1 | EXCHANGE OUT DISTR            |:EX10001|800      |1435|
 | |
| |2 |  MERGE UNION DISTINCT         |        |800      |1435|
 | |
| |3 |   SORT                        |        |500      |966 |
 | |
| |4 |    PX PARTITION ITERATOR      |        |500      |331 |
 | |
| |5 |     TABLE SCAN                |t1      |500      |331 |
 | |
| |6 |   EXCHANGE IN MERGE SORT DISTR|        |300      |206 |
 | |
| |7 |    EXCHANGE OUT DISTR (PKEY)  |:EX10000|300      |192 |
 | |
| |8 |     PX PARTITION ITERATOR     |        |300      |192 |
 | |
| |9 |      TABLE SCAN               |t2      |300      |192 |
 | |
| ============================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([UNION([1])]), filter(nil)
 | |
|   1 - output([UNION([1])]), filter(nil), dop=1
 | |
|   2 - output([UNION([1])]), filter(nil)
 | |
|   3 - output([t1.c1]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   4 - output([t1.c1]), filter(nil)
 | |
|   5 - output([t1.c1]), filter(nil), 
 | |
|       access([t1.c1]), partitions(p[0-4]), 
 | |
|       hint(read_consistency:2)
 | |
|   6 - output([t2.c1]), filter(nil), sort_keys([t2.c1, ASC]), Local Order
 | |
|   7 - (#keys=1, [t2.c1]), output([t2.c1]), filter(nil), dop=1
 | |
|   8 - output([t2.c1]), filter(nil)
 | |
|   9 - output([t2.c1]), filter(nil), 
 | |
|       access([t2.c1]), partitions(p[0-2]), 
 | |
|       hint(read_consistency:2)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       FULL(@"SEL$1" "opt.t1"@"SEL$1")
 | |
|       FULL(@"SEL$2" "opt.t2"@"SEL$2")
 | |
|       READ_CONSISTENCY("WEAK")
 | |
|       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      |1472|
 | |
| |1 | EXCHANGE OUT DISTR            |:EX10001|800      |1435|
 | |
| |2 |  MERGE UNION DISTINCT         |        |800      |1435|
 | |
| |3 |   SORT                        |        |500      |966 |
 | |
| |4 |    PX PARTITION ITERATOR      |        |500      |331 |
 | |
| |5 |     TABLE SCAN                |t1      |500      |331 |
 | |
| |6 |   EXCHANGE IN MERGE SORT DISTR|        |300      |206 |
 | |
| |7 |    EXCHANGE OUT DISTR (PKEY)  |:EX10000|300      |192 |
 | |
| |8 |     PX PARTITION ITERATOR     |        |300      |192 |
 | |
| |9 |      TABLE SCAN               |t2      |300      |192 |
 | |
| ============================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([UNION([1])]), filter(nil)
 | |
|   1 - output([UNION([1])]), filter(nil), dop=1
 | |
|   2 - output([UNION([1])]), filter(nil)
 | |
|   3 - output([t1.c1]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   4 - output([t1.c1]), filter(nil)
 | |
|   5 - output([t1.c1]), filter(nil), 
 | |
|       access([t1.c1]), partitions(p[0-4])
 | |
|   6 - output([t2.c1]), filter(nil), sort_keys([t2.c1, ASC]), Local Order
 | |
|   7 - (#keys=1, [t2.c1]), output([t2.c1]), filter(nil), dop=1
 | |
|   8 - output([t2.c1]), filter(nil)
 | |
|   9 - output([t2.c1]), filter(nil), 
 | |
|       access([t2.c1]), partitions(p[0-2])
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       FULL(@"SEL$1" "opt.t1"@"SEL$1")
 | |
|       FULL(@"SEL$2" "opt.t2"@"SEL$2")
 | |
|       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      |389 |
 | |
| |1 | EXCHANGE OUT DISTR    |:EX10000     |500      |342 |
 | |
| |2 |  PX PARTITION ITERATOR|             |500      |342 |
 | |
| |3 |   TABLE SCAN          |t1(idx_t1_c2)|500      |342 |
 | |
| =========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2]), filter(nil)
 | |
|   1 - output([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")
 | |
|       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                |             |100      |1428|
 | |
| |1 | EXCHANGE OUT DISTR           |:EX10001     |100      |1418|
 | |
| |2 |  MERGE SEMI JOIN             |             |100      |1418|
 | |
| |3 |   SORT                       |             |500      |1074|
 | |
| |4 |    PX PARTITION ITERATOR     |             |500      |342 |
 | |
| |5 |     TABLE SCAN               |t1           |500      |342 |
 | |
| |6 |   SORT                       |             |100      |203 |
 | |
| |7 |    EXCHANGE IN DISTR         |             |100      |95  |
 | |
| |8 |     EXCHANGE OUT DISTR (PKEY)|:EX10000     |100      |90  |
 | |
| |9 |      TABLE SCAN              |t4(idx_t4_c3)|100      |90  |
 | |
| ================================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2]), filter(nil), 
 | |
|       equal_conds([t1.c1 = t4.c1]), other_conds(nil)
 | |
|   3 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   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])
 | |
|   6 - output([t4.c1]), filter(nil), sort_keys([t4.c1, ASC])
 | |
|   7 - output([t4.c1]), filter(nil)
 | |
|   8 - (#keys=1, [t4.c1]), output([t4.c1]), filter(nil), is_single, dop=1
 | |
|   9 - output([t4.c1]), filter(nil), 
 | |
|       access([t4.c1]), partitions(p0)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "opt.t4"@"SEL$1" ))
 | |
|       USE_MERGE(@"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")
 | |
|       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               |        |100      |1320|
 | |
| |1 | EXCHANGE OUT DISTR          |:EX10001|100      |1311|
 | |
| |2 |  MERGE SEMI JOIN            |        |100      |1311|
 | |
| |3 |   SORT                      |        |500      |1074|
 | |
| |4 |    PX PARTITION ITERATOR    |        |500      |342 |
 | |
| |5 |     TABLE SCAN              |t1      |500      |342 |
 | |
| |6 |   EXCHANGE IN DISTR         |        |100      |95  |
 | |
| |7 |    EXCHANGE OUT DISTR (PKEY)|:EX10000|100      |90  |
 | |
| |8 |     TABLE SCAN              |t4      |100      |90  |
 | |
| ==========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2]), filter(nil), 
 | |
|       equal_conds([t1.c1 = t4.c1]), other_conds(nil)
 | |
|   3 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   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])
 | |
|   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)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "opt.t4"@"SEL$1" ))
 | |
|       USE_MERGE(@"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")
 | |
|       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               |        |100      |1361|
 | |
| |1 | EXCHANGE OUT DISTR          |:EX10001|100      |1347|
 | |
| |2 |  MERGE JOIN                 |        |100      |1347|
 | |
| |3 |   SORT                      |        |500      |1074|
 | |
| |4 |    PX PARTITION ITERATOR    |        |500      |342 |
 | |
| |5 |     TABLE SCAN              |t1      |500      |342 |
 | |
| |6 |   EXCHANGE IN DISTR         |        |100      |131 |
 | |
| |7 |    EXCHANGE OUT DISTR (PKEY)|:EX10000|100      |126 |
 | |
| |8 |     SUBPLAN SCAN            |VIEW2   |100      |126 |
 | |
| |9 |      MERGE DISTINCT         |        |100      |112 |
 | |
| |10|       TABLE SCAN            |t4      |100      |90  |
 | |
| ==========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2]), filter(nil), 
 | |
|       equal_conds([t1.c1 = VIEW2.VIEW1.c1]), other_conds(nil)
 | |
|   3 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   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])
 | |
|   6 - output([VIEW2.VIEW1.c1]), filter(nil)
 | |
|   7 - (#keys=1, [VIEW2.VIEW1.c1]), output([VIEW2.VIEW1.c1]), filter(nil), is_single, dop=1
 | |
|   8 - output([VIEW2.VIEW1.c1]), filter(nil), 
 | |
|       access([VIEW2.VIEW1.c1])
 | |
|   9 - output([t4.c1]), filter(nil), 
 | |
|       distinct([t4.c1])
 | |
|   10 - output([t4.c1]), filter(nil), 
 | |
|       access([t4.c1]), partitions(p0)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$4" ("opt.t1"@"SEL$4" "VIEW2"@"SEL$4" ))
 | |
|       USE_MERGE(@"SEL$4" ("VIEW2"@"SEL$4" ))
 | |
|       PQ_DISTRIBUTE(@"SEL$4" ("VIEW2"@"SEL$4" ) NONE PARTITION)
 | |
|       FULL(@"SEL$4" "opt.t1"@"SEL$4")
 | |
|       FULL(@"SEL$3" "opt.t4"@"SEL$3")
 | |
|       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               |        |100      |1325|
 | |
| |1 | EXCHANGE OUT DISTR          |:EX10001|100      |1311|
 | |
| |2 |  MERGE JOIN                 |        |100      |1311|
 | |
| |3 |   EXCHANGE IN DISTR         |        |100      |95  |
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)|:EX10000|100      |90  |
 | |
| |5 |     TABLE SCAN              |t4      |100      |90  |
 | |
| |6 |   SORT                      |        |500      |1074|
 | |
| |7 |    PX PARTITION ITERATOR    |        |500      |342 |
 | |
| |8 |     TABLE SCAN              |t1      |500      |342 |
 | |
| ==========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t4.c1]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t4.c1]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t4.c1]), 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
 | |
|       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")
 | |
|       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               |        |100      |1325|
 | |
| |1 | EXCHANGE OUT DISTR          |:EX10001|100      |1311|
 | |
| |2 |  MERGE JOIN                 |        |100      |1311|
 | |
| |3 |   SORT                      |        |500      |1074|
 | |
| |4 |    PX PARTITION ITERATOR    |        |500      |342 |
 | |
| |5 |     TABLE SCAN              |t1      |500      |342 |
 | |
| |6 |   EXCHANGE IN DISTR         |        |100      |95  |
 | |
| |7 |    EXCHANGE OUT DISTR (PKEY)|:EX10000|100      |90  |
 | |
| |8 |     TABLE SCAN              |t4      |100      |90  |
 | |
| ==========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t4.c1]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t4.c1]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t4.c1]), filter(nil), 
 | |
|       equal_conds([t4.c1 = t1.c1]), other_conds(nil)
 | |
|   3 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   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])
 | |
|   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)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "opt.t4"@"SEL$1" ))
 | |
|       USE_MERGE(@"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")
 | |
|       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               |        |100      |1325|
 | |
| |1 | EXCHANGE OUT DISTR          |:EX10001|100      |1311|
 | |
| |2 |  MERGE JOIN                 |        |100      |1311|
 | |
| |3 |   SORT                      |        |500      |1074|
 | |
| |4 |    PX PARTITION ITERATOR    |        |500      |342 |
 | |
| |5 |     TABLE SCAN              |t1      |500      |342 |
 | |
| |6 |   EXCHANGE IN DISTR         |        |100      |95  |
 | |
| |7 |    EXCHANGE OUT DISTR (PKEY)|:EX10000|100      |90  |
 | |
| |8 |     TABLE SCAN              |t4      |100      |90  |
 | |
| ==========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t4.c1]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t4.c1]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t4.c1]), filter(nil), 
 | |
|       equal_conds([t4.c1 = t1.c1]), other_conds(nil)
 | |
|   3 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   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])
 | |
|   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)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "opt.t4"@"SEL$1" ))
 | |
|       USE_MERGE(@"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")
 | |
|       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               |        |100      |1325|
 | |
| |1 | EXCHANGE OUT DISTR          |:EX10001|100      |1311|
 | |
| |2 |  MERGE JOIN                 |        |100      |1311|
 | |
| |3 |   EXCHANGE IN DISTR         |        |100      |95  |
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)|:EX10000|100      |90  |
 | |
| |5 |     TABLE SCAN              |t4      |100      |90  |
 | |
| |6 |   SORT                      |        |500      |1074|
 | |
| |7 |    PX PARTITION ITERATOR    |        |500      |342 |
 | |
| |8 |     TABLE SCAN              |t1      |500      |342 |
 | |
| ==========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t4.c1]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t4.c1]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t4.c1]), 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
 | |
|       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")
 | |
|       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               |        |100      |1325|
 | |
| |1 | EXCHANGE OUT DISTR          |:EX10001|100      |1311|
 | |
| |2 |  MERGE JOIN                 |        |100      |1311|
 | |
| |3 |   EXCHANGE IN DISTR         |        |100      |95  |
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)|:EX10000|100      |90  |
 | |
| |5 |     TABLE SCAN              |t_a     |100      |90  |
 | |
| |6 |   SORT                      |        |500      |1074|
 | |
| |7 |    PX PARTITION ITERATOR    |        |500      |342 |
 | |
| |8 |     TABLE SCAN              |t1      |500      |342 |
 | |
| ==========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t_a.c1]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t_a.c1]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t_a.c1]), 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), 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
 | |
|       LEADING(@"SEL$1" ("opt.t_a"@"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.t_a"@"SEL$1")
 | |
|       FULL(@"SEL$1" "opt.t1"@"SEL$1")
 | |
|       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               |        |100      |1325|
 | |
| |1 | EXCHANGE OUT DISTR          |:EX10001|100      |1311|
 | |
| |2 |  MERGE JOIN                 |        |100      |1311|
 | |
| |3 |   SORT                      |        |500      |1074|
 | |
| |4 |    PX PARTITION ITERATOR    |        |500      |342 |
 | |
| |5 |     TABLE SCAN              |t1      |500      |342 |
 | |
| |6 |   EXCHANGE IN DISTR         |        |100      |95  |
 | |
| |7 |    EXCHANGE OUT DISTR (PKEY)|:EX10000|100      |90  |
 | |
| |8 |     TABLE SCAN              |t_a     |100      |90  |
 | |
| ==========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t_a.c1]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t_a.c1]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t_a.c1]), filter(nil), 
 | |
|       equal_conds([t_a.c1 = t1.c1]), other_conds(nil)
 | |
|   3 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   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])
 | |
|   6 - output([t_a.c1]), filter(nil)
 | |
|   7 - (#keys=1, [t_a.c1]), output([t_a.c1]), filter(nil), is_single, dop=1
 | |
|   8 - output([t_a.c1]), filter(nil), 
 | |
|       access([t_a.c1]), partitions(p0)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "opt.t_a"@"SEL$1" ))
 | |
|       USE_MERGE(@"SEL$1" ("opt.t_a"@"SEL$1" ))
 | |
|       PQ_DISTRIBUTE(@"SEL$1" ("opt.t_a"@"SEL$1" ) NONE PARTITION)
 | |
|       FULL(@"SEL$1" "opt.t1"@"SEL$1")
 | |
|       FULL(@"SEL$1" "opt.t_a"@"SEL$1")
 | |
|       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               |        |100      |3780|
 | |
| |1 | EXCHANGE OUT DISTR          |:EX10001|100      |3766|
 | |
| |2 |  NESTED-LOOP JOIN           |        |100      |3766|
 | |
| |3 |   EXCHANGE IN DISTR         |        |100      |95  |
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)|:EX10000|100      |90  |
 | |
| |5 |     TABLE SCAN              |t4      |100      |90  |
 | |
| |6 |   PX PARTITION ITERATOR     |        |1        |36  |
 | |
| |7 |    TABLE GET                |t1      |1        |36  |
 | |
| ==========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t4.c1]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t4.c1]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t4.c1]), 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
 | |
|       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")
 | |
|       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               |        |100      |1325|
 | |
| |1 | EXCHANGE OUT DISTR          |:EX10001|100      |1311|
 | |
| |2 |  MERGE JOIN                 |        |100      |1311|
 | |
| |3 |   EXCHANGE IN DISTR         |        |100      |95  |
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)|:EX10000|100      |90  |
 | |
| |5 |     TABLE SCAN              |t4      |100      |90  |
 | |
| |6 |   SORT                      |        |500      |1074|
 | |
| |7 |    PX PARTITION ITERATOR    |        |500      |342 |
 | |
| |8 |     TABLE SCAN              |t1      |500      |342 |
 | |
| ==========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t4.c1]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t4.c1]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t4.c1]), 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
 | |
|       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")
 | |
|       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               |        |100      |1325|
 | |
| |1 | EXCHANGE OUT DISTR          |:EX10001|100      |1311|
 | |
| |2 |  MERGE JOIN                 |        |100      |1311|
 | |
| |3 |   EXCHANGE IN DISTR         |        |100      |95  |
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)|:EX10000|100      |90  |
 | |
| |5 |     TABLE SCAN              |t4      |100      |90  |
 | |
| |6 |   SORT                      |        |500      |1074|
 | |
| |7 |    PX PARTITION ITERATOR    |        |500      |342 |
 | |
| |8 |     TABLE SCAN              |t1      |500      |342 |
 | |
| ==========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2], [t4.c1]), filter(nil)
 | |
|   1 - output([t1.c1], [t1.c2], [t4.c1]), filter(nil), dop=1
 | |
|   2 - output([t1.c1], [t1.c2], [t4.c1]), 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
 | |
|       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")
 | |
|       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      |1409|
 | |
| |1 | EXCHANGE OUT DISTR          |:EX10001     |800      |1371|
 | |
| |2 |  HASH UNION DISTINCT        |             |800      |1371|
 | |
| |3 |   PX PARTITION ITERATOR     |             |500      |331 |
 | |
| |4 |    TABLE SCAN               |t1(idx_t1_c2)|500      |331 |
 | |
| |5 |   EXCHANGE IN DISTR         |             |300      |206 |
 | |
| |6 |    EXCHANGE OUT DISTR (PKEY)|:EX10000     |300      |192 |
 | |
| |7 |     PX PARTITION ITERATOR   |             |300      |192 |
 | |
| |8 |      TABLE SCAN             |t2           |300      |192 |
 | |
| ===============================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([UNION([1])]), filter(nil)
 | |
|   1 - output([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
 | |
|       INDEX(@"SEL$1" "opt.t1"@"SEL$1" "idx_t1_c2")
 | |
|       FULL(@"SEL$2" "opt.t2"@"SEL$2")
 | |
|       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      |2296|
 | |
| |1 | EXCHANGE OUT DISTR               |:EX10002|600      |2239|
 | |
| |2 |  MERGE UNION DISTINCT            |        |600      |2239|
 | |
| |3 |   EXCHANGE IN MERGE SORT DISTR   |        |300      |1488|
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)     |:EX10001|300      |1460|
 | |
| |5 |     MERGE JOIN                   |        |300      |1460|
 | |
| |6 |      SORT                        |        |500      |966 |
 | |
| |7 |       PX PARTITION ITERATOR      |        |500      |331 |
 | |
| |8 |        TABLE SCAN                |t1      |500      |331 |
 | |
| |9 |      EXCHANGE IN MERGE SORT DISTR|        |300      |206 |
 | |
| |10|       EXCHANGE OUT DISTR (PKEY)  |:EX10000|300      |192 |
 | |
| |11|        PX PARTITION ITERATOR     |        |300      |192 |
 | |
| |12|         TABLE SCAN               |t2      |300      |192 |
 | |
| |13|   SORT                           |        |300      |554 |
 | |
| |14|    PX PARTITION ITERATOR         |        |300      |192 |
 | |
| |15|     TABLE SCAN                   |t2      |300      |192 |
 | |
| ===============================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([UNION([1])]), filter(nil)
 | |
|   1 - output([UNION([1])]), filter(nil), dop=1
 | |
|   2 - output([UNION([1])]), filter(nil)
 | |
|   3 - output([t1.c1]), filter(nil), sort_keys([t1.c1, ASC])
 | |
|   4 - (#keys=1, [t1.c1]), output([t1.c1]), filter(nil), dop=1
 | |
|   5 - output([t1.c1]), filter(nil), 
 | |
|       equal_conds([t1.c1 = t2.c1]), other_conds(nil)
 | |
|   6 - output([t1.c1]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   7 - output([t1.c1]), filter(nil)
 | |
|   8 - output([t1.c1]), filter(nil), 
 | |
|       access([t1.c1]), partitions(p[0-4])
 | |
|   9 - output([t2.c1]), filter(nil), sort_keys([t2.c1, ASC]), Local Order
 | |
|   10 - (#keys=1, [t2.c1]), output([t2.c1]), filter(nil), dop=1
 | |
|   11 - output([t2.c1]), filter(nil)
 | |
|   12 - output([t2.c1]), filter(nil), 
 | |
|       access([t2.c1]), partitions(p[0-2])
 | |
|   13 - output([t2.c1]), filter(nil), sort_keys([t2.c1, ASC]), local merge sort
 | |
|   14 - output([t2.c1]), filter(nil)
 | |
|   15 - output([t2.c1]), filter(nil), 
 | |
|       access([t2.c1]), partitions(p[0-2])
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "opt.t2"@"SEL$1" ))
 | |
|       USE_MERGE(@"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")
 | |
|       FULL(@"SEL$2" "opt.t2"@"SEL$2")
 | |
|       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      |2296|
 | |
| |1 | EXCHANGE OUT DISTR               |:EX10002|600      |2239|
 | |
| |2 |  MERGE UNION DISTINCT            |        |600      |2239|
 | |
| |3 |   EXCHANGE IN MERGE SORT DISTR   |        |300      |1488|
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)     |:EX10001|300      |1460|
 | |
| |5 |     MERGE JOIN                   |        |300      |1460|
 | |
| |6 |      SORT                        |        |500      |966 |
 | |
| |7 |       PX PARTITION ITERATOR      |        |500      |331 |
 | |
| |8 |        TABLE SCAN                |t1      |500      |331 |
 | |
| |9 |      EXCHANGE IN MERGE SORT DISTR|        |300      |206 |
 | |
| |10|       EXCHANGE OUT DISTR (PKEY)  |:EX10000|300      |192 |
 | |
| |11|        PX PARTITION ITERATOR     |        |300      |192 |
 | |
| |12|         TABLE SCAN               |t2      |300      |192 |
 | |
| |13|   SORT                           |        |300      |554 |
 | |
| |14|    PX PARTITION ITERATOR         |        |300      |192 |
 | |
| |15|     TABLE SCAN                   |t2      |300      |192 |
 | |
| ===============================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([UNION([1])]), filter(nil)
 | |
|   1 - output([UNION([1])]), filter(nil), dop=1
 | |
|   2 - output([UNION([1])]), filter(nil)
 | |
|   3 - output([t1.c1]), filter(nil), sort_keys([t1.c1, ASC])
 | |
|   4 - (#keys=1, [t1.c1]), output([t1.c1]), filter(nil), dop=1
 | |
|   5 - output([t1.c1]), filter(nil), 
 | |
|       equal_conds([t1.c1 = t2.c1]), other_conds(nil)
 | |
|   6 - output([t1.c1]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   7 - output([t1.c1]), filter(nil)
 | |
|   8 - output([t1.c1]), filter(nil), 
 | |
|       access([t1.c1]), partitions(p[0-4])
 | |
|   9 - output([t2.c1]), filter(nil), sort_keys([t2.c1, ASC]), Local Order
 | |
|   10 - (#keys=1, [t2.c1]), output([t2.c1]), filter(nil), dop=1
 | |
|   11 - output([t2.c1]), filter(nil)
 | |
|   12 - output([t2.c1]), filter(nil), 
 | |
|       access([t2.c1]), partitions(p[0-2])
 | |
|   13 - output([t2.c1]), filter(nil), sort_keys([t2.c1, ASC]), local merge sort
 | |
|   14 - output([t2.c1]), filter(nil)
 | |
|   15 - output([t2.c1]), filter(nil), 
 | |
|       access([t2.c1]), partitions(p[0-2])
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "opt.t2"@"SEL$1" ))
 | |
|       USE_MERGE(@"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")
 | |
|       FULL(@"SEL$2" "opt.t2"@"SEL$2")
 | |
|       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 |MERGE UNION DISTINCT          |        |300      |1692|
 | |
| |1 | PX COORDINATOR MERGE SORT    |        |100      |1212|
 | |
| |2 |  EXCHANGE OUT DISTR          |:EX10001|100      |1203|
 | |
| |3 |   MERGE JOIN                 |        |100      |1203|
 | |
| |4 |    EXCHANGE IN DISTR         |        |100      |95  |
 | |
| |5 |     EXCHANGE OUT DISTR (PKEY)|:EX10000|100      |90  |
 | |
| |6 |      TABLE SCAN              |t4      |100      |90  |
 | |
| |7 |    SORT                      |        |500      |966 |
 | |
| |8 |     PX PARTITION ITERATOR    |        |500      |331 |
 | |
| |9 |      TABLE SCAN              |t1      |500      |331 |
 | |
| |10| PX COORDINATOR MERGE SORT    |        |200      |381 |
 | |
| |11|  EXCHANGE OUT DISTR          |:EX20000|200      |372 |
 | |
| |12|   SORT                       |        |200      |372 |
 | |
| |13|    PX PARTITION ITERATOR     |        |200      |140 |
 | |
| |14|     TABLE SCAN               |t3      |200      |140 |
 | |
| ===========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([UNION([1])]), filter(nil)
 | |
|   1 - output([t1.c1]), filter(nil), sort_keys([t1.c1, ASC])
 | |
|   2 - output([t1.c1]), filter(nil), dop=1
 | |
|   3 - output([t1.c1]), filter(nil), 
 | |
|       equal_conds([t4.c1 = t1.c1]), other_conds(nil)
 | |
|   4 - output([t4.c1]), filter(nil)
 | |
|   5 - (#keys=1, [t4.c1]), output([t4.c1]), filter(nil), is_single, dop=1
 | |
|   6 - output([t4.c1]), filter(nil), 
 | |
|       access([t4.c1]), partitions(p0)
 | |
|   7 - output([t1.c1]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   8 - output([t1.c1]), filter(nil)
 | |
|   9 - output([t1.c1]), filter(nil), 
 | |
|       access([t1.c1]), partitions(p[0-4])
 | |
|   10 - output([t3.c1]), filter(nil), sort_keys([t3.c1, ASC])
 | |
|   11 - output([t3.c1]), filter(nil), dop=1
 | |
|   12 - output([t3.c1]), filter(nil), sort_keys([t3.c1, ASC]), local merge sort
 | |
|   13 - output([t3.c1]), filter(nil)
 | |
|   14 - output([t3.c1]), filter(nil), 
 | |
|       access([t3.c1]), partitions(p[0-1])
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       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")
 | |
|       FULL(@"SEL$3" "opt.t3"@"SEL$3")
 | |
|       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 |MERGE UNION DISTINCT          |        |300      |1692|
 | |
| |1 | PX COORDINATOR MERGE SORT    |        |100      |1212|
 | |
| |2 |  EXCHANGE OUT DISTR          |:EX10001|100      |1203|
 | |
| |3 |   MERGE JOIN                 |        |100      |1203|
 | |
| |4 |    EXCHANGE IN DISTR         |        |100      |95  |
 | |
| |5 |     EXCHANGE OUT DISTR (PKEY)|:EX10000|100      |90  |
 | |
| |6 |      TABLE SCAN              |t4      |100      |90  |
 | |
| |7 |    SORT                      |        |500      |966 |
 | |
| |8 |     PX PARTITION ITERATOR    |        |500      |331 |
 | |
| |9 |      TABLE SCAN              |t1      |500      |331 |
 | |
| |10| PX COORDINATOR MERGE SORT    |        |200      |381 |
 | |
| |11|  EXCHANGE OUT DISTR          |:EX20000|200      |372 |
 | |
| |12|   SORT                       |        |200      |372 |
 | |
| |13|    PX PARTITION ITERATOR     |        |200      |140 |
 | |
| |14|     TABLE SCAN               |t3      |200      |140 |
 | |
| ===========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([UNION([1])]), filter(nil)
 | |
|   1 - output([t1.c1]), filter(nil), sort_keys([t1.c1, ASC])
 | |
|   2 - output([t1.c1]), filter(nil), dop=1
 | |
|   3 - output([t1.c1]), filter(nil), 
 | |
|       equal_conds([t4.c1 = t1.c1]), other_conds(nil)
 | |
|   4 - output([t4.c1]), filter(nil)
 | |
|   5 - (#keys=1, [t4.c1]), output([t4.c1]), filter(nil), is_single, dop=1
 | |
|   6 - output([t4.c1]), filter(nil), 
 | |
|       access([t4.c1]), partitions(p0)
 | |
|   7 - output([t1.c1]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   8 - output([t1.c1]), filter(nil)
 | |
|   9 - output([t1.c1]), filter(nil), 
 | |
|       access([t1.c1]), partitions(p[0-4])
 | |
|   10 - output([t3.c1]), filter(nil), sort_keys([t3.c1, ASC])
 | |
|   11 - output([t3.c1]), filter(nil), dop=1
 | |
|   12 - output([t3.c1]), filter(nil), sort_keys([t3.c1, ASC]), local merge sort
 | |
|   13 - output([t3.c1]), filter(nil)
 | |
|   14 - output([t3.c1]), filter(nil), 
 | |
|       access([t3.c1]), partitions(p[0-1])
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       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")
 | |
|       FULL(@"SEL$3" "opt.t3"@"SEL$3")
 | |
|       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                |             |100      |1315|
 | |
| |1 | EXCHANGE OUT DISTR           |:EX10001     |100      |1311|
 | |
| |2 |  MERGE SEMI JOIN             |             |100      |1311|
 | |
| |3 |   SORT                       |             |500      |966 |
 | |
| |4 |    PX PARTITION ITERATOR     |             |500      |331 |
 | |
| |5 |     TABLE SCAN               |t1           |500      |331 |
 | |
| |6 |   SORT                       |             |100      |203 |
 | |
| |7 |    EXCHANGE IN DISTR         |             |100      |95  |
 | |
| |8 |     EXCHANGE OUT DISTR (PKEY)|:EX10000     |100      |90  |
 | |
| |9 |      SUBPLAN SCAN            |VIEW1        |100      |90  |
 | |
| |10|       MERGE GROUP BY         |             |100      |77  |
 | |
| |11|        TABLE SCAN            |t4(idx_t4_c2)|100      |54  |
 | |
| ================================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1]), filter(nil)
 | |
|   1 - output([t1.c1]), filter(nil), dop=1
 | |
|   2 - output([t1.c1]), filter(nil), 
 | |
|       equal_conds([t1.c1 = VIEW1.c1]), other_conds(nil)
 | |
|   3 - output([t1.c1]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   4 - output([t1.c1]), filter(nil)
 | |
|   5 - output([t1.c1]), filter(nil), 
 | |
|       access([t1.c1]), partitions(p[0-4])
 | |
|   6 - output([VIEW1.c1]), filter(nil), sort_keys([VIEW1.c1, ASC])
 | |
|   7 - output([VIEW1.c1]), filter(nil)
 | |
|   8 - (#keys=1, [VIEW1.c1]), output([VIEW1.c1]), filter(nil), is_single, dop=1
 | |
|   9 - output([VIEW1.c1]), filter(nil), 
 | |
|       access([VIEW1.c1])
 | |
|   10 - output([t4.c1]), filter(nil), 
 | |
|       group([t4.c2]), agg_func(nil)
 | |
|   11 - output([t4.c1], [t4.c2]), filter(nil), 
 | |
|       access([t4.c1], [t4.c2]), partitions(p0)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "VIEW1"@"SEL$1" ))
 | |
|       USE_MERGE(@"SEL$1" ("VIEW1"@"SEL$1" ))
 | |
|       PQ_DISTRIBUTE(@"SEL$1" ("VIEW1"@"SEL$1" ) NONE PARTITION)
 | |
|       FULL(@"SEL$1" "opt.t1"@"SEL$1")
 | |
|       NO_USE_HASH_AGGREGATION(@"SEL$2")
 | |
|       INDEX(@"SEL$2" "opt.t4"@"SEL$2" "idx_t4_c2")
 | |
|       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                |             |100      |1315|
 | |
| |1 | EXCHANGE OUT DISTR           |:EX10001     |100      |1311|
 | |
| |2 |  MERGE SEMI JOIN             |             |100      |1311|
 | |
| |3 |   SORT                       |             |500      |966 |
 | |
| |4 |    PX PARTITION ITERATOR     |             |500      |331 |
 | |
| |5 |     TABLE SCAN               |t1           |500      |331 |
 | |
| |6 |   SORT                       |             |100      |203 |
 | |
| |7 |    EXCHANGE IN DISTR         |             |100      |95  |
 | |
| |8 |     EXCHANGE OUT DISTR (PKEY)|:EX10000     |100      |90  |
 | |
| |9 |      SUBPLAN SCAN            |VIEW1        |100      |90  |
 | |
| |10|       MERGE GROUP BY         |             |100      |77  |
 | |
| |11|        TABLE SCAN            |t4(idx_t4_c2)|100      |54  |
 | |
| ================================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1]), filter(nil)
 | |
|   1 - output([t1.c1]), filter(nil), dop=1
 | |
|   2 - output([t1.c1]), filter(nil), 
 | |
|       equal_conds([t1.c1 = VIEW1.c1]), other_conds(nil)
 | |
|   3 - output([t1.c1]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   4 - output([t1.c1]), filter(nil)
 | |
|   5 - output([t1.c1]), filter(nil), 
 | |
|       access([t1.c1]), partitions(p[0-4])
 | |
|   6 - output([VIEW1.c1]), filter(nil), sort_keys([VIEW1.c1, ASC])
 | |
|   7 - output([VIEW1.c1]), filter(nil)
 | |
|   8 - (#keys=1, [VIEW1.c1]), output([VIEW1.c1]), filter(nil), is_single, dop=1
 | |
|   9 - output([VIEW1.c1]), filter(nil), 
 | |
|       access([VIEW1.c1])
 | |
|   10 - output([t4.c1]), filter(nil), 
 | |
|       group([t4.c2]), agg_func(nil)
 | |
|   11 - output([t4.c1], [t4.c2]), filter(nil), 
 | |
|       access([t4.c1], [t4.c2]), partitions(p0)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "VIEW1"@"SEL$1" ))
 | |
|       USE_MERGE(@"SEL$1" ("VIEW1"@"SEL$1" ))
 | |
|       PQ_DISTRIBUTE(@"SEL$1" ("VIEW1"@"SEL$1" ) NONE PARTITION)
 | |
|       FULL(@"SEL$1" "opt.t1"@"SEL$1")
 | |
|       NO_USE_HASH_AGGREGATION(@"SEL$2")
 | |
|       INDEX(@"SEL$2" "opt.t4"@"SEL$2" "idx_t4_c2")
 | |
|       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                  |             |72       |2087|
 | |
| |1 | EXCHANGE OUT DISTR             |:EX10002     |72       |2083|
 | |
| |2 |  MERGE SEMI JOIN               |             |72       |2083|
 | |
| |3 |   SORT                         |             |500      |966 |
 | |
| |4 |    PX PARTITION ITERATOR       |             |500      |331 |
 | |
| |5 |     TABLE SCAN                 |t1           |500      |331 |
 | |
| |6 |   SORT                         |             |100      |993 |
 | |
| |7 |    EXCHANGE IN DISTR           |             |100      |885 |
 | |
| |8 |     EXCHANGE OUT DISTR (PKEY)  |:EX10001     |100      |880 |
 | |
| |9 |      SUBPLAN SCAN              |VIEW1        |100      |880 |
 | |
| |10|       HASH GROUP BY            |             |100      |866 |
 | |
| |11|        HASH JOIN               |             |290      |700 |
 | |
| |12|         TABLE SCAN             |t4(idx_t4_c2)|100      |54  |
 | |
| |13|         EXCHANGE IN DISTR      |             |300      |247 |
 | |
| |14|          EXCHANGE OUT DISTR    |:EX10000     |300      |205 |
 | |
| |15|           PX PARTITION ITERATOR|             |300      |205 |
 | |
| |16|            TABLE SCAN          |t5           |300      |205 |
 | |
| ==================================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1]), filter(nil)
 | |
|   1 - output([t1.c1]), filter(nil), dop=1
 | |
|   2 - output([t1.c1]), filter(nil), 
 | |
|       equal_conds([t1.c1 = VIEW1.c1]), other_conds(nil)
 | |
|   3 - output([t1.c1]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   4 - output([t1.c1]), filter(nil)
 | |
|   5 - output([t1.c1]), filter(nil), 
 | |
|       access([t1.c1]), partitions(p[0-4])
 | |
|   6 - output([VIEW1.c1]), filter(nil), sort_keys([VIEW1.c1, ASC])
 | |
|   7 - output([VIEW1.c1]), filter(nil)
 | |
|   8 - (#keys=1, [VIEW1.c1]), output([VIEW1.c1]), filter(nil), is_single, dop=1
 | |
|   9 - output([VIEW1.c1]), filter(nil), 
 | |
|       access([VIEW1.c1])
 | |
|   10 - output([t4.c1]), filter(nil), 
 | |
|       group([t4.c2]), agg_func(nil)
 | |
|   11 - output([t4.c1], [t4.c2]), filter(nil), 
 | |
|       equal_conds([t5.c1 = t4.c1]), other_conds(nil)
 | |
|   12 - output([t4.c2], [t4.c1]), filter(nil), 
 | |
|       access([t4.c2], [t4.c1]), partitions(p0)
 | |
|   13 - output([t5.c1]), filter(nil)
 | |
|   14 - output([t5.c1]), filter(nil), dop=1
 | |
|   15 - output([t5.c1]), filter(nil)
 | |
|   16 - output([t5.c1]), filter(nil), 
 | |
|       access([t5.c1]), partitions(p[0-2])
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "VIEW1"@"SEL$1" ))
 | |
|       USE_MERGE(@"SEL$1" ("VIEW1"@"SEL$1" ))
 | |
|       PQ_DISTRIBUTE(@"SEL$1" ("VIEW1"@"SEL$1" ) NONE PARTITION)
 | |
|       FULL(@"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" ))
 | |
|       INDEX(@"SEL$2" "opt.t4"@"SEL$2" "idx_t4_c2")
 | |
|       FULL(@"SEL$2" "opt.t5"@"SEL$2")
 | |
|       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                  |             |72       |2143|
 | |
| |1 | EXCHANGE OUT DISTR             |:EX10002     |72       |2140|
 | |
| |2 |  MERGE SEMI JOIN               |             |72       |2140|
 | |
| |3 |   SORT                         |             |500      |966 |
 | |
| |4 |    PX PARTITION ITERATOR       |             |500      |331 |
 | |
| |5 |     TABLE SCAN                 |t1           |500      |331 |
 | |
| |6 |   SORT                         |             |100      |1049|
 | |
| |7 |    EXCHANGE IN DISTR           |             |100      |941 |
 | |
| |8 |     EXCHANGE OUT DISTR (PKEY)  |:EX10001     |100      |937 |
 | |
| |9 |      SUBPLAN SCAN              |VIEW1        |100      |937 |
 | |
| |10|       HASH GROUP BY            |             |100      |923 |
 | |
| |11|        HASH JOIN               |             |290      |756 |
 | |
| |12|         TABLE SCAN             |t4(idx_t4_c3)|100      |92  |
 | |
| |13|         EXCHANGE IN DISTR      |             |300      |247 |
 | |
| |14|          EXCHANGE OUT DISTR    |:EX10000     |300      |205 |
 | |
| |15|           PX PARTITION ITERATOR|             |300      |205 |
 | |
| |16|            TABLE SCAN          |t5           |300      |205 |
 | |
| ==================================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1]), filter(nil)
 | |
|   1 - output([t1.c1]), filter(nil), dop=1
 | |
|   2 - output([t1.c1]), filter(nil), 
 | |
|       equal_conds([t1.c1 = VIEW1.c1]), other_conds(nil)
 | |
|   3 - output([t1.c1]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   4 - output([t1.c1]), filter(nil)
 | |
|   5 - output([t1.c1]), filter(nil), 
 | |
|       access([t1.c1]), partitions(p[0-4])
 | |
|   6 - output([VIEW1.c1]), filter(nil), sort_keys([VIEW1.c1, ASC])
 | |
|   7 - output([VIEW1.c1]), filter(nil)
 | |
|   8 - (#keys=1, [VIEW1.c1]), output([VIEW1.c1]), filter(nil), is_single, dop=1
 | |
|   9 - output([VIEW1.c1]), filter(nil), 
 | |
|       access([VIEW1.c1])
 | |
|   10 - output([t4.c1]), filter(nil), 
 | |
|       group([t4.c2]), agg_func(nil)
 | |
|   11 - output([t4.c1], [t4.c2]), filter(nil), 
 | |
|       equal_conds([t5.c1 = t4.c1]), other_conds(nil)
 | |
|   12 - output([t4.c1], [t4.c2]), filter(nil), 
 | |
|       access([t4.c1], [t4.c2]), partitions(p0)
 | |
|   13 - output([t5.c1]), filter(nil)
 | |
|   14 - output([t5.c1]), filter(nil), dop=1
 | |
|   15 - output([t5.c1]), filter(nil)
 | |
|   16 - output([t5.c1]), filter(nil), 
 | |
|       access([t5.c1]), partitions(p[0-2])
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "VIEW1"@"SEL$1" ))
 | |
|       USE_MERGE(@"SEL$1" ("VIEW1"@"SEL$1" ))
 | |
|       PQ_DISTRIBUTE(@"SEL$1" ("VIEW1"@"SEL$1" ) NONE PARTITION)
 | |
|       FULL(@"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" ))
 | |
|       INDEX(@"SEL$2" "opt.t4"@"SEL$2" "idx_t4_c3")
 | |
|       FULL(@"SEL$2" "opt.t5"@"SEL$2")
 | |
|       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                  |             |72       |2332|
 | |
| |1 | EXCHANGE OUT DISTR             |:EX10002     |72       |2329|
 | |
| |2 |  MERGE SEMI JOIN               |             |72       |2329|
 | |
| |3 |   SORT                         |             |500      |966 |
 | |
| |4 |    PX PARTITION ITERATOR       |             |500      |331 |
 | |
| |5 |     TABLE SCAN                 |t1           |500      |331 |
 | |
| |6 |   SORT                         |             |100      |1238|
 | |
| |7 |    EXCHANGE IN DISTR           |             |100      |1130|
 | |
| |8 |     EXCHANGE OUT DISTR (PKEY)  |:EX10001     |100      |1126|
 | |
| |9 |      SUBPLAN SCAN              |VIEW1        |100      |1126|
 | |
| |10|       HASH GROUP BY            |             |100      |1112|
 | |
| |11|        HASH JOIN               |             |290      |945 |
 | |
| |12|         EXCHANGE IN DISTR      |             |300      |247 |
 | |
| |13|          EXCHANGE OUT DISTR    |:EX10000     |300      |205 |
 | |
| |14|           PX PARTITION ITERATOR|             |300      |205 |
 | |
| |15|            TABLE SCAN          |t5           |300      |205 |
 | |
| |16|         TABLE SCAN             |t4(idx_t4_c2)|100      |54  |
 | |
| ==================================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1]), filter(nil)
 | |
|   1 - output([t1.c1]), filter(nil), dop=1
 | |
|   2 - output([t1.c1]), filter(nil), 
 | |
|       equal_conds([t1.c1 = VIEW1.c1]), other_conds(nil)
 | |
|   3 - output([t1.c1]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   4 - output([t1.c1]), filter(nil)
 | |
|   5 - output([t1.c1]), filter(nil), 
 | |
|       access([t1.c1]), partitions(p[0-4])
 | |
|   6 - output([VIEW1.c1]), filter(nil), sort_keys([VIEW1.c1, ASC])
 | |
|   7 - output([VIEW1.c1]), filter(nil)
 | |
|   8 - (#keys=1, [VIEW1.c1]), output([VIEW1.c1]), filter(nil), is_single, dop=1
 | |
|   9 - output([VIEW1.c1]), filter(nil), 
 | |
|       access([VIEW1.c1])
 | |
|   10 - output([t4.c1]), filter(nil), 
 | |
|       group([t4.c2]), agg_func(nil)
 | |
|   11 - output([t4.c1], [t4.c2]), filter(nil), 
 | |
|       equal_conds([t5.c1 = t4.c1]), other_conds(nil)
 | |
|   12 - output([t5.c1]), filter(nil)
 | |
|   13 - output([t5.c1]), filter(nil), dop=1
 | |
|   14 - output([t5.c1]), filter(nil)
 | |
|   15 - output([t5.c1]), filter(nil), 
 | |
|       access([t5.c1]), partitions(p[0-2])
 | |
|   16 - output([t4.c1], [t4.c2]), filter(nil), 
 | |
|       access([t4.c1], [t4.c2]), partitions(p0)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "VIEW1"@"SEL$1" ))
 | |
|       USE_MERGE(@"SEL$1" ("VIEW1"@"SEL$1" ))
 | |
|       PQ_DISTRIBUTE(@"SEL$1" ("VIEW1"@"SEL$1" ) NONE PARTITION)
 | |
|       FULL(@"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" ))
 | |
|       FULL(@"SEL$2" "opt.t5"@"SEL$2")
 | |
|       INDEX(@"SEL$2" "opt.t4"@"SEL$2" "idx_t4_c2")
 | |
|       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        |9181|
 | |
| |1 | SUBPLAN SCAN                |VIEW1       |1        |9145|
 | |
| |2 |  SCALAR GROUP BY            |            |1        |9145|
 | |
| |3 |   NESTED-LOOP JOIN CARTESIAN|            |10000    |7235|
 | |
| |4 |    TABLE SCAN               |t1(idx_t1_a)|100      |52  |
 | |
| |5 |    MATERIAL                 |            |100      |106 |
 | |
| |6 |     TABLE SCAN              |t2          |100      |88  |
 | |
| |7 | TABLE GET                   |t1          |1        |36  |
 | |
| ==============================================================
 | |
| 
 | |
| 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([1]), filter(nil)
 | |
|   6 - output([1]), 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
 | |
|       LEADING(@"SEL$1" ("VIEW1"@"SEL$1" "hint.t1"@"SEL$1" ))
 | |
|       USE_NL(@"SEL$1" ("hint.t1"@"SEL$1" ))
 | |
|       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" ))
 | |
|       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")
 | |
|       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        |9181|
 | |
| |1 | SUBPLAN SCAN                |VIEW1       |1        |9145|
 | |
| |2 |  SCALAR GROUP BY            |            |1        |9145|
 | |
| |3 |   NESTED-LOOP JOIN CARTESIAN|            |10000    |7235|
 | |
| |4 |    TABLE SCAN               |t2          |100      |88  |
 | |
| |5 |    MATERIAL                 |            |100      |71  |
 | |
| |6 |     TABLE SCAN              |t1(idx_t1_a)|100      |52  |
 | |
| |7 | TABLE GET                   |t1          |1        |36  |
 | |
| ==============================================================
 | |
| 
 | |
| 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([1]), 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
 | |
|       LEADING(@"SEL$1" ("VIEW1"@"SEL$1" "hint.t1"@"SEL$1" ))
 | |
|       USE_NL(@"SEL$1" ("hint.t1"@"SEL$1" ))
 | |
|       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" ))
 | |
|       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")
 | |
|       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                       |        |40       |2335|
 | |
| |1 | EXCHANGE OUT DISTR                  |:EX10003|40       |2329|
 | |
| |2 |  MERGE JOIN                         |        |40       |2329|
 | |
| |3 |   EXCHANGE IN MERGE SORT DISTR      |        |60       |1898|
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)        |:EX10002|60       |1892|
 | |
| |5 |     MATERIAL                        |        |60       |1892|
 | |
| |6 |      MERGE JOIN                     |        |60       |1870|
 | |
| |7 |       EXCHANGE IN MERGE SORT DISTR  |        |100      |1226|
 | |
| |8 |        EXCHANGE OUT DISTR (PKEY)    |:EX10001|100      |1221|
 | |
| |9 |         MATERIAL                    |        |100      |1221|
 | |
| |10|          MERGE SEMI JOIN            |        |100      |1203|
 | |
| |11|           SORT                      |        |500      |966 |
 | |
| |12|            PX PARTITION ITERATOR    |        |500      |331 |
 | |
| |13|             TABLE SCAN              |t1      |500      |331 |
 | |
| |14|           EXCHANGE IN DISTR         |        |100      |95  |
 | |
| |15|            EXCHANGE OUT DISTR (PKEY)|:EX10000|100      |90  |
 | |
| |16|             TABLE SCAN              |t4      |100      |90  |
 | |
| |17|       SORT                          |        |300      |554 |
 | |
| |18|        PX PARTITION ITERATOR        |        |300      |192 |
 | |
| |19|         TABLE SCAN                  |t2      |300      |192 |
 | |
| |20|   SORT                              |        |200      |372 |
 | |
| |21|    PX PARTITION ITERATOR            |        |200      |140 |
 | |
| |22|     TABLE SCAN                      |t3      |200      |140 |
 | |
| ==================================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1]), filter(nil)
 | |
|   1 - output([t1.c1]), filter(nil), dop=1
 | |
|   2 - output([t1.c1]), filter(nil), 
 | |
|       equal_conds([t3.c1 = t2.c1]), other_conds(nil)
 | |
|   3 - output([t1.c1], [t2.c1]), filter(nil), sort_keys([t2.c1, ASC])
 | |
|   4 - (#keys=1, [t2.c1]), output([t1.c1], [t2.c1]), filter(nil), dop=1
 | |
|   5 - output([t1.c1], [t2.c1]), filter(nil)
 | |
|   6 - output([t1.c1], [t2.c1]), filter(nil), 
 | |
|       equal_conds([t2.c1 = t1.c1]), other_conds(nil)
 | |
|   7 - output([t1.c1]), filter(nil), sort_keys([t1.c1, ASC])
 | |
|   8 - (#keys=1, [t1.c1]), output([t1.c1]), filter(nil), dop=1
 | |
|   9 - output([t1.c1]), filter(nil)
 | |
|   10 - output([t1.c1]), filter(nil), 
 | |
|       equal_conds([t1.c1 = t4.c1]), other_conds(nil)
 | |
|   11 - output([t1.c1]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   12 - output([t1.c1]), filter(nil)
 | |
|   13 - output([t1.c1]), filter(nil), 
 | |
|       access([t1.c1]), partitions(p[0-4])
 | |
|   14 - output([t4.c1]), filter(nil)
 | |
|   15 - (#keys=1, [t4.c1]), output([t4.c1]), filter(nil), is_single, dop=1
 | |
|   16 - output([t4.c1]), filter(nil), 
 | |
|       access([t4.c1]), partitions(p0)
 | |
|   17 - output([t2.c1]), filter(nil), sort_keys([t2.c1, ASC]), local merge sort
 | |
|   18 - output([t2.c1]), filter(nil)
 | |
|   19 - output([t2.c1]), filter(nil), 
 | |
|       access([t2.c1]), partitions(p[0-2])
 | |
|   20 - output([t3.c1]), filter(nil), sort_keys([t3.c1, ASC]), local merge sort
 | |
|   21 - output([t3.c1]), filter(nil)
 | |
|   22 - output([t3.c1]), filter(nil), 
 | |
|       access([t3.c1]), partitions(p[0-1])
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ((("opt.t1"@"SEL$1" "opt.t4"@"SEL$1" )"opt.t2"@"SEL$1" )"opt.t3"@"SEL$1" ))
 | |
|       USE_MERGE(@"SEL$1" ("opt.t3"@"SEL$1" ))
 | |
|       PQ_DISTRIBUTE(@"SEL$1" ("opt.t3"@"SEL$1" ) PARTITION NONE)
 | |
|       USE_MERGE(@"SEL$1" ("opt.t2"@"SEL$1" ))
 | |
|       PQ_DISTRIBUTE(@"SEL$1" ("opt.t2"@"SEL$1" ) PARTITION NONE)
 | |
|       USE_MERGE(@"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")
 | |
|       FULL(@"SEL$1" "opt.t2"@"SEL$1")
 | |
|       FULL(@"SEL$1" "opt.t3"@"SEL$1")
 | |
|       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                       |             |40       |2517|
 | |
| |1 | EXCHANGE OUT DISTR                  |:EX10003     |40       |2509|
 | |
| |2 |  MERGE JOIN                         |             |40       |2509|
 | |
| |3 |   EXCHANGE IN MERGE SORT DISTR      |             |60       |2079|
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)        |:EX10002     |60       |2070|
 | |
| |5 |     MATERIAL                        |             |60       |2070|
 | |
| |6 |      MERGE JOIN                     |             |60       |2037|
 | |
| |7 |       EXCHANGE IN MERGE SORT DISTR  |             |100      |1393|
 | |
| |8 |        EXCHANGE OUT DISTR (PKEY)    |:EX10001     |100      |1383|
 | |
| |9 |         MATERIAL                    |             |100      |1383|
 | |
| |10|          MERGE JOIN                 |             |100      |1346|
 | |
| |11|           SORT                      |             |500      |966 |
 | |
| |12|            PX PARTITION ITERATOR    |             |500      |331 |
 | |
| |13|             TABLE SCAN              |t1           |500      |331 |
 | |
| |14|           EXCHANGE IN DISTR         |             |100      |239 |
 | |
| |15|            EXCHANGE OUT DISTR (PKEY)|:EX10000     |100      |234 |
 | |
| |16|             SUBPLAN SCAN            |VIEW2        |100      |234 |
 | |
| |17|              MERGE DISTINCT         |             |100      |220 |
 | |
| |18|               SORT                  |             |100      |198 |
 | |
| |19|                TABLE SCAN           |t4(idx_t4_c3)|100      |90  |
 | |
| |20|       SORT                          |             |300      |554 |
 | |
| |21|        PX PARTITION ITERATOR        |             |300      |192 |
 | |
| |22|         TABLE SCAN                  |t2           |300      |192 |
 | |
| |23|   SORT                              |             |200      |372 |
 | |
| |24|    PX PARTITION ITERATOR            |             |200      |140 |
 | |
| |25|     TABLE SCAN                      |t3           |200      |140 |
 | |
| =======================================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1]), filter(nil)
 | |
|   1 - output([t1.c1]), filter(nil), dop=1
 | |
|   2 - output([t1.c1]), filter(nil), 
 | |
|       equal_conds([t3.c1 = t2.c1]), other_conds(nil)
 | |
|   3 - output([t1.c1], [t2.c1]), filter(nil), sort_keys([t2.c1, ASC])
 | |
|   4 - (#keys=1, [t2.c1]), output([t1.c1], [t2.c1]), filter(nil), dop=1
 | |
|   5 - output([t1.c1], [t2.c1]), filter(nil)
 | |
|   6 - output([t1.c1], [t2.c1]), filter(nil), 
 | |
|       equal_conds([t2.c1 = t1.c1]), other_conds(nil)
 | |
|   7 - output([t1.c1]), filter(nil), sort_keys([t1.c1, ASC])
 | |
|   8 - (#keys=1, [t1.c1]), output([t1.c1]), filter(nil), dop=1
 | |
|   9 - output([t1.c1]), filter(nil)
 | |
|   10 - output([t1.c1]), filter(nil), 
 | |
|       equal_conds([t1.c1 = VIEW2.VIEW1.c1]), other_conds(nil)
 | |
|   11 - output([t1.c1]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   12 - output([t1.c1]), filter(nil)
 | |
|   13 - output([t1.c1]), filter(nil), 
 | |
|       access([t1.c1]), partitions(p[0-4])
 | |
|   14 - output([VIEW2.VIEW1.c1]), filter(nil)
 | |
|   15 - (#keys=1, [VIEW2.VIEW1.c1]), output([VIEW2.VIEW1.c1]), filter(nil), is_single, dop=1
 | |
|   16 - output([VIEW2.VIEW1.c1]), filter(nil), 
 | |
|       access([VIEW2.VIEW1.c1])
 | |
|   17 - output([t4.c1]), filter(nil), 
 | |
|       distinct([t4.c1])
 | |
|   18 - output([t4.c1]), filter(nil), sort_keys([t4.c1, ASC])
 | |
|   19 - output([t4.c1]), filter(nil), 
 | |
|       access([t4.c1]), partitions(p0)
 | |
|   20 - output([t2.c1]), filter(nil), sort_keys([t2.c1, ASC]), local merge sort
 | |
|   21 - output([t2.c1]), filter(nil)
 | |
|   22 - output([t2.c1]), filter(nil), 
 | |
|       access([t2.c1]), partitions(p[0-2])
 | |
|   23 - output([t3.c1]), filter(nil), sort_keys([t3.c1, ASC]), local merge sort
 | |
|   24 - output([t3.c1]), filter(nil)
 | |
|   25 - output([t3.c1]), filter(nil), 
 | |
|       access([t3.c1]), partitions(p[0-1])
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$6" ((("opt.t1"@"SEL$6" "VIEW2"@"SEL$6" )"opt.t2"@"SEL$6" )"opt.t3"@"SEL$6" ))
 | |
|       USE_MERGE(@"SEL$6" ("opt.t3"@"SEL$6" ))
 | |
|       PQ_DISTRIBUTE(@"SEL$6" ("opt.t3"@"SEL$6" ) PARTITION NONE)
 | |
|       USE_MERGE(@"SEL$6" ("opt.t2"@"SEL$6" ))
 | |
|       PQ_DISTRIBUTE(@"SEL$6" ("opt.t2"@"SEL$6" ) PARTITION NONE)
 | |
|       USE_MERGE(@"SEL$6" ("VIEW2"@"SEL$6" ))
 | |
|       PQ_DISTRIBUTE(@"SEL$6" ("VIEW2"@"SEL$6" ) NONE PARTITION)
 | |
|       FULL(@"SEL$6" "opt.t1"@"SEL$6")
 | |
|       INDEX(@"SEL$5" "opt.t4"@"SEL$5" "idx_t4_c3")
 | |
|       FULL(@"SEL$6" "opt.t2"@"SEL$6")
 | |
|       FULL(@"SEL$6" "opt.t3"@"SEL$6")
 | |
|       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                       |             |40       |2424|
 | |
| |1 | EXCHANGE OUT DISTR                  |:EX10003     |40       |2418|
 | |
| |2 |  MERGE JOIN                         |             |40       |2418|
 | |
| |3 |   EXCHANGE IN MERGE SORT DISTR      |             |60       |1987|
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)        |:EX10002     |60       |1982|
 | |
| |5 |     MATERIAL                        |             |60       |1982|
 | |
| |6 |      MERGE JOIN                     |             |60       |1960|
 | |
| |7 |       EXCHANGE IN MERGE SORT DISTR  |             |100      |1315|
 | |
| |8 |        EXCHANGE OUT DISTR (PKEY)    |:EX10001     |100      |1310|
 | |
| |9 |         MERGE SEMI JOIN             |             |100      |1310|
 | |
| |10|          SORT                       |             |500      |966 |
 | |
| |11|           PX PARTITION ITERATOR     |             |500      |331 |
 | |
| |12|            TABLE SCAN               |t1           |500      |331 |
 | |
| |13|          SORT                       |             |100      |203 |
 | |
| |14|           EXCHANGE IN DISTR         |             |100      |95  |
 | |
| |15|            EXCHANGE OUT DISTR (PKEY)|:EX10000     |100      |90  |
 | |
| |16|             TABLE SCAN              |t4(idx_t4_c3)|100      |90  |
 | |
| |17|       SORT                          |             |300      |554 |
 | |
| |18|        PX PARTITION ITERATOR        |             |300      |192 |
 | |
| |19|         TABLE SCAN                  |t2           |300      |192 |
 | |
| |20|   SORT                              |             |200      |372 |
 | |
| |21|    PX PARTITION ITERATOR            |             |200      |140 |
 | |
| |22|     TABLE SCAN                      |t3           |200      |140 |
 | |
| =======================================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1]), filter(nil)
 | |
|   1 - output([t1.c1]), filter(nil), dop=1
 | |
|   2 - output([t1.c1]), filter(nil), 
 | |
|       equal_conds([t3.c1 = t2.c1]), other_conds(nil)
 | |
|   3 - output([t1.c1], [t2.c1]), filter(nil), sort_keys([t2.c1, ASC])
 | |
|   4 - (#keys=1, [t2.c1]), output([t1.c1], [t2.c1]), filter(nil), dop=1
 | |
|   5 - output([t1.c1], [t2.c1]), filter(nil)
 | |
|   6 - output([t1.c1], [t2.c1]), filter(nil), 
 | |
|       equal_conds([t2.c1 = t1.c1]), other_conds(nil)
 | |
|   7 - output([t1.c1]), filter(nil), sort_keys([t1.c1, ASC])
 | |
|   8 - (#keys=1, [t1.c1]), output([t1.c1]), filter(nil), dop=1
 | |
|   9 - output([t1.c1]), filter(nil), 
 | |
|       equal_conds([t1.c1 = t4.c1]), other_conds(nil)
 | |
|   10 - output([t1.c1]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   11 - output([t1.c1]), filter(nil)
 | |
|   12 - output([t1.c1]), filter(nil), 
 | |
|       access([t1.c1]), partitions(p[0-4])
 | |
|   13 - output([t4.c1]), filter(nil), sort_keys([t4.c1, ASC])
 | |
|   14 - output([t4.c1]), filter(nil)
 | |
|   15 - (#keys=1, [t4.c1]), output([t4.c1]), filter(nil), is_single, dop=1
 | |
|   16 - output([t4.c1]), filter(nil), 
 | |
|       access([t4.c1]), partitions(p0)
 | |
|   17 - output([t2.c1]), filter(nil), sort_keys([t2.c1, ASC]), local merge sort
 | |
|   18 - output([t2.c1]), filter(nil)
 | |
|   19 - output([t2.c1]), filter(nil), 
 | |
|       access([t2.c1]), partitions(p[0-2])
 | |
|   20 - output([t3.c1]), filter(nil), sort_keys([t3.c1, ASC]), local merge sort
 | |
|   21 - output([t3.c1]), filter(nil)
 | |
|   22 - output([t3.c1]), filter(nil), 
 | |
|       access([t3.c1]), partitions(p[0-1])
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ((("opt.t1"@"SEL$1" "opt.t4"@"SEL$1" )"opt.t2"@"SEL$1" )"opt.t3"@"SEL$1" ))
 | |
|       USE_MERGE(@"SEL$1" ("opt.t3"@"SEL$1" ))
 | |
|       PQ_DISTRIBUTE(@"SEL$1" ("opt.t3"@"SEL$1" ) PARTITION NONE)
 | |
|       USE_MERGE(@"SEL$1" ("opt.t2"@"SEL$1" ))
 | |
|       PQ_DISTRIBUTE(@"SEL$1" ("opt.t2"@"SEL$1" ) PARTITION NONE)
 | |
|       USE_MERGE(@"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.t2"@"SEL$1")
 | |
|       FULL(@"SEL$1" "opt.t3"@"SEL$1")
 | |
|       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 |HASH JOIN                         |             |20       |4094|
 | |
| |1 | PX COORDINATOR                   |             |60       |1965|
 | |
| |2 |  EXCHANGE OUT DISTR              |:EX10002     |60       |1960|
 | |
| |3 |   MERGE JOIN                     |             |60       |1960|
 | |
| |4 |    EXCHANGE IN MERGE SORT DISTR  |             |100      |1315|
 | |
| |5 |     EXCHANGE OUT DISTR (PKEY)    |:EX10001     |100      |1310|
 | |
| |6 |      MERGE SEMI JOIN             |             |100      |1310|
 | |
| |7 |       SORT                       |             |500      |966 |
 | |
| |8 |        PX PARTITION ITERATOR     |             |500      |331 |
 | |
| |9 |         TABLE SCAN               |t1           |500      |331 |
 | |
| |10|       SORT                       |             |100      |203 |
 | |
| |11|        EXCHANGE IN DISTR         |             |100      |95  |
 | |
| |12|         EXCHANGE OUT DISTR (PKEY)|:EX10000     |100      |90  |
 | |
| |13|          TABLE SCAN              |t4(idx_t4_c3)|100      |90  |
 | |
| |14|    SORT                          |             |300      |554 |
 | |
| |15|     PX PARTITION ITERATOR        |             |300      |192 |
 | |
| |16|      TABLE SCAN                  |t2           |300      |192 |
 | |
| |17| PX COORDINATOR                   |             |100      |2008|
 | |
| |18|  EXCHANGE OUT DISTR              |:EX20001     |100      |2003|
 | |
| |19|   SUBPLAN SCAN                   |t_a          |100      |2003|
 | |
| |20|    MERGE GROUP BY                |             |100      |1989|
 | |
| |21|     EXCHANGE IN MERGE SORT DISTR |             |100      |1923|
 | |
| |22|      EXCHANGE OUT DISTR (HASH)   |:EX20000     |100      |1909|
 | |
| |23|       PX PARTITION ITERATOR      |             |100      |1909|
 | |
| |24|        MERGE GROUP BY            |             |100      |1909|
 | |
| |25|         TABLE SCAN               |t5(idx_t5_c2)|300      |1842|
 | |
| ====================================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1]), filter(nil), 
 | |
|       equal_conds([t_a.c1 = t2.c1]), other_conds(nil)
 | |
|   1 - output([t1.c1], [t2.c1]), filter(nil)
 | |
|   2 - output([t1.c1], [t2.c1]), filter(nil), dop=1
 | |
|   3 - output([t1.c1], [t2.c1]), filter(nil), 
 | |
|       equal_conds([t2.c1 = t1.c1]), other_conds(nil)
 | |
|   4 - output([t1.c1]), filter(nil), sort_keys([t1.c1, ASC])
 | |
|   5 - (#keys=1, [t1.c1]), output([t1.c1]), filter(nil), dop=1
 | |
|   6 - output([t1.c1]), filter(nil), 
 | |
|       equal_conds([t1.c1 = t4.c1]), other_conds(nil)
 | |
|   7 - output([t1.c1]), filter(nil), sort_keys([t1.c1, ASC]), local merge sort
 | |
|   8 - output([t1.c1]), filter(nil)
 | |
|   9 - output([t1.c1]), filter(nil), 
 | |
|       access([t1.c1]), partitions(p[0-4])
 | |
|   10 - output([t4.c1]), filter(nil), sort_keys([t4.c1, ASC])
 | |
|   11 - output([t4.c1]), filter(nil)
 | |
|   12 - (#keys=1, [t4.c1]), output([t4.c1]), filter(nil), is_single, dop=1
 | |
|   13 - output([t4.c1]), filter(nil), 
 | |
|       access([t4.c1]), partitions(p0)
 | |
|   14 - output([t2.c1]), filter(nil), sort_keys([t2.c1, ASC]), local merge sort
 | |
|   15 - output([t2.c1]), filter(nil)
 | |
|   16 - output([t2.c1]), filter(nil), 
 | |
|       access([t2.c1]), partitions(p[0-2])
 | |
|   17 - output([t_a.c1]), filter(nil)
 | |
|   18 - output([t_a.c1]), filter(nil), dop=1
 | |
|   19 - output([t_a.c1]), filter(nil), 
 | |
|       access([t_a.c1])
 | |
|   20 - output([t5.c1]), filter(nil), 
 | |
|       group([t5.c2]), agg_func(nil)
 | |
|   21 - output([t5.c1], [t5.c2]), filter(nil), sort_keys([t5.c2, ASC]), Local Order
 | |
|   22 - (#keys=1, [t5.c2]), output([t5.c1], [t5.c2]), filter(nil), dop=1
 | |
|   23 - output([t5.c1], [t5.c2]), filter(nil)
 | |
|   24 - output([t5.c1], [t5.c2]), filter(nil), 
 | |
|       group([t5.c2]), agg_func(nil)
 | |
|   25 - output([t5.c2], [t5.c1]), filter(nil), 
 | |
|       access([t5.c2], [t5.c1]), partitions(p[0-2])
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ((("opt.t1"@"SEL$1" "opt.t4"@"SEL$1" )"opt.t2"@"SEL$1" )"t_a"@"SEL$1" ))
 | |
|       USE_HASH(@"SEL$1" ("t_a"@"SEL$1" ))
 | |
|       USE_MERGE(@"SEL$1" ("opt.t2"@"SEL$1" ))
 | |
|       PQ_DISTRIBUTE(@"SEL$1" ("opt.t2"@"SEL$1" ) PARTITION NONE)
 | |
|       USE_MERGE(@"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.t2"@"SEL$1")
 | |
|       NO_USE_HASH_AGGREGATION(@"SEL$3")
 | |
|       NO_USE_HASH_AGGREGATION(@"SEL$3")
 | |
|       INDEX(@"SEL$3" "opt.t5"@"SEL$3" "idx_t5_c2")
 | |
|       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      |54  |
 | |
| ==================================================
 | |
| 
 | |
| 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")
 | |
|       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      |54  |
 | |
| ====================================================
 | |
| 
 | |
| 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")
 | |
|       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      |54  |
 | |
| ====================================================
 | |
| 
 | |
| 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")
 | |
|       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      |90  |
 | |
| ===================================
 | |
| 
 | |
| 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")
 | |
|       USE_PLAN_CACHE("NONE")
 | |
|       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      |90  |
 | |
| ===================================
 | |
| 
 | |
| 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")
 | |
|       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      |90  |
 | |
| ==========================================
 | |
| 
 | |
| 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")
 | |
|       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        |37  |
 | |
| |1 | SUBPLAN SCAN  |VIEW2|1        |37  |
 | |
| |2 |  TABLE SCAN   |za   |1        |36  |
 | |
| =========================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([T_FUN_MIN(VIEW2.a)]), filter(nil), 
 | |
|       group(nil), agg_func([T_FUN_MIN(VIEW2.a)])
 | |
|   1 - output([VIEW2.a]), filter(nil), 
 | |
|       access([VIEW2.a])
 | |
|   2 - output([za.a]), filter(nil), 
 | |
|       access([za.a]), partitions(p0), 
 | |
|       limit(1), offset(nil)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       FULL(@"SEL$3" "opt.za"@"SEL$3")
 | |
|       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        |37  |
 | |
| |1 | SUBPLAN SCAN  |VIEW2|1        |37  |
 | |
| |2 |  TABLE SCAN   |za   |1        |36  |
 | |
| =========================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([T_FUN_MIN(VIEW2.a)]), filter(nil), 
 | |
|       group(nil), agg_func([T_FUN_MIN(VIEW2.a)])
 | |
|   1 - output([VIEW2.a]), filter(nil), 
 | |
|       access([VIEW2.a])
 | |
|   2 - output([za.a]), filter(nil), 
 | |
|       access([za.a]), partitions(p0), 
 | |
|       limit(1), offset(nil)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       FULL(@"SEL$3" "opt.za"@"SEL$3")
 | |
|       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      |621 |
 | |
| =======================================
 | |
| 
 | |
| 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")
 | |
|       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(z1_b)|100      |621 |
 | |
| =======================================
 | |
| 
 | |
| 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")
 | |
|       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            |             |101      |6491|
 | |
| |1 | SORT                     |             |1421     |6176|
 | |
| |2 |  HASH OUTER JOIN         |             |1421     |2259|
 | |
| |3 |   PX COORDINATOR         |             |500      |389 |
 | |
| |4 |    EXCHANGE OUT DISTR    |:EX10000     |500      |342 |
 | |
| |5 |     PX PARTITION ITERATOR|             |500      |342 |
 | |
| |6 |      TABLE SCAN          |t1(idx_t1_c2)|500      |342 |
 | |
| |7 |   PX COORDINATOR         |             |300      |290 |
 | |
| |8 |    EXCHANGE OUT DISTR    |:EX20000     |300      |205 |
 | |
| |9 |     PX PARTITION ITERATOR|             |300      |205 |
 | |
| |10|      TABLE SCAN          |t2           |300      |205 |
 | |
| ============================================================
 | |
| 
 | |
| 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.c1], [t1.c2]), filter(nil)
 | |
|   4 - 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), 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
 | |
|       NO_USE_HASH_AGGREGATION(@"SEL$1")
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "opt.t2"@"SEL$1" ))
 | |
|       USE_HASH(@"SEL$1" ("opt.t2"@"SEL$1" ))
 | |
|       INDEX(@"SEL$1" "opt.t1"@"SEL$1" "idx_t1_c2")
 | |
|       FULL(@"SEL$1" "opt.t2"@"SEL$1")
 | |
|       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 |LIMIT                       |             |3        |6655|
 | |
| |1 | TOP-N SORT                 |             |3        |6655|
 | |
| |2 |  MERGE GROUP BY            |             |101      |6491|
 | |
| |3 |   SORT                     |             |1421     |6176|
 | |
| |4 |    HASH OUTER JOIN         |             |1421     |2259|
 | |
| |5 |     PX COORDINATOR         |             |500      |389 |
 | |
| |6 |      EXCHANGE OUT DISTR    |:EX10000     |500      |342 |
 | |
| |7 |       PX PARTITION ITERATOR|             |500      |342 |
 | |
| |8 |        TABLE SCAN          |t1(idx_t1_c2)|500      |342 |
 | |
| |9 |     PX COORDINATOR         |             |300      |290 |
 | |
| |10|      EXCHANGE OUT DISTR    |:EX20000     |300      |205 |
 | |
| |11|       PX PARTITION ITERATOR|             |300      |205 |
 | |
| |12|        TABLE SCAN          |t2           |300      |205 |
 | |
| ==============================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c2], [t1.c1], [t2.c1], [t2.c3]), filter(nil), limit(3), offset(nil)
 | |
|   1 - output([t1.c2], [t1.c1], [t2.c1], [t2.c3]), filter(nil), sort_keys([t2.c3, ASC]), topn(3)
 | |
|   2 - output([t1.c2], [t1.c1], [t2.c1], [t2.c3]), filter(nil), 
 | |
|       group([t1.c2]), agg_func(nil)
 | |
|   3 - output([t1.c2], [t1.c1], [t2.c1], [t2.c3]), filter(nil), sort_keys([t1.c2, ASC])
 | |
|   4 - output([t1.c2], [t1.c1], [t2.c1], [t2.c3]), filter(nil), 
 | |
|       equal_conds([t1.c2 = t2.c2]), other_conds(nil)
 | |
|   5 - output([t1.c1], [t1.c2]), filter(nil)
 | |
|   6 - 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), 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
 | |
|       NO_USE_HASH_AGGREGATION(@"SEL$1")
 | |
|       LEADING(@"SEL$1" ("opt.t1"@"SEL$1" "opt.t2"@"SEL$1" ))
 | |
|       USE_HASH(@"SEL$1" ("opt.t2"@"SEL$1" ))
 | |
|       INDEX(@"SEL$1" "opt.t1"@"SEL$1" "idx_t1_c2")
 | |
|       FULL(@"SEL$1" "opt.t2"@"SEL$1")
 | |
|       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 |MERGE JOIN                 |             |490      |1585|
 | |
| |1 | TABLE SCAN                |t2           |100      |90  |
 | |
| |2 | PX COORDINATOR MERGE SORT |             |500      |1122|
 | |
| |3 |  EXCHANGE OUT DISTR       |:EX10000     |500      |1074|
 | |
| |4 |   SORT                    |             |500      |1074|
 | |
| |5 |    PX PARTITION ITERATOR  |             |500      |342 |
 | |
| |6 |     TABLE SCAN            |t1(idx_t1_c2)|500      |342 |
 | |
| =============================================================
 | |
| 
 | |
| 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), sort_keys([t1.c2, ASC])
 | |
|   3 - output([t1.c1], [t1.c2]), filter(nil), dop=1
 | |
|   4 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c2, ASC]), local merge sort
 | |
|   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])
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       LEADING(@"SEL$1" ("hint.t2"@"SEL$1" "opt.t1"@"SEL$1" ))
 | |
|       USE_MERGE(@"SEL$1" ("opt.t1"@"SEL$1" ))
 | |
|       FULL(@"SEL$1" "hint.t2"@"SEL$1")
 | |
|       INDEX(@"SEL$1" "opt.t1"@"SEL$1" "idx_t1_c2")
 | |
|       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              |       |10000    |18304|
 | |
| |1 | NESTED-LOOP JOIN CARTESIAN|       |10000    |7284 |
 | |
| |2 |  TABLE SCAN               |hint_t2|100      |95   |
 | |
| |3 |  MATERIAL                 |       |100      |113  |
 | |
| |4 |   TABLE SCAN              |a      |100      |95   |
 | |
| ========================================================
 | |
| 
 | |
| 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
 | |
|       LEADING(@"SEL$1" ("opt.hint_t2"@"SEL$1" "opt.a"@"SEL$1" ))
 | |
|       USE_NL(@"SEL$1" ("opt.a"@"SEL$1" ))
 | |
|       USE_NL_MATERIALIZATION(@"SEL$1" ("opt.a"@"SEL$1" ))
 | |
|       FULL(@"SEL$1" "opt.hint_t2"@"SEL$1")
 | |
|       FULL(@"SEL$1" "opt.a"@"SEL$1")
 | |
|       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        |43  |
 | |
| |1 | HASH DISTINCT|       |5        |43  |
 | |
| |2 |  TABLE SCAN  |hint_t1|5        |37  |
 | |
| ==========================================
 | |
| 
 | |
| 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), 
 | |
|       hint(read_consistency:2)
 | |
| 
 | |
| Outline Data:
 | |
| -------------------------------------
 | |
|   /*+
 | |
|       BEGIN_OUTLINE_DATA
 | |
|       FULL(@"SEL$2" "opt.hint_t1"@"SEL$2")
 | |
|       READ_CONSISTENCY("WEAK")
 | |
|       END_OUTLINE_DATA
 | |
|   */
 | |
| 
 | |
| *************** Case 121(end)  ************** 
 | |
| 
 | 
