268 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			268 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| ***************   Case 1   ***************
 | |
| 
 | |
| SQL: explain extended select * from t1 order by c1,c2 limit 100; 
 | |
| 
 | |
| ========================================================
 | |
| |ID|OPERATOR                   |NAME    |EST. ROWS|COST|
 | |
| --------------------------------------------------------
 | |
| |0 |LIMIT                      |        |100      |279 |
 | |
| |1 | PX COORDINATOR MERGE SORT |        |100      |278 |
 | |
| |2 |  EXCHANGE OUT DISTR       |:EX10000|100      |268 |
 | |
| |3 |   TOP-N SORT              |        |100      |250 |
 | |
| |4 |    PX PARTITION ITERATOR  |        |100      |229 |
 | |
| |5 |     TABLE SCAN            |t1      |100      |229 |
 | |
| ========================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1], [t1.c2]), filter(nil), limit(100), offset(nil)
 | |
|   1 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC])
 | |
|   2 - output([t1.c1], [t1.c2]), filter(nil), dop=1
 | |
|   3 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC]), topn(100), local merge sort
 | |
|   4 - output([t1.c1], [t1.c2]), filter(nil), 
 | |
|       force partition granule.
 | |
|   5 - output([t1.c1], [t1.c2]), filter(nil), 
 | |
|       access([t1.c1], [t1.c2]), partitions(p[0-4]), 
 | |
|       limit(100), offset(nil), 
 | |
|       is_index_back=false, 
 | |
|       range_key([t1.c1]), range(MIN ; MAX)always true
 | |
| 
 | |
| *************** Case 1(end)  ************** 
 | |
| 
 | |
| ***************   Case 2   ***************
 | |
| 
 | |
| SQL: explain extended select c2, sum(c1) from t1 group by c2; 
 | |
| 
 | |
| =================================================================
 | |
| |ID|OPERATOR                       |NAME         |EST. ROWS|COST|
 | |
| -----------------------------------------------------------------
 | |
| |0 |PX COORDINATOR                 |             |100      |528 |
 | |
| |1 | EXCHANGE OUT DISTR            |:EX10001     |100      |509 |
 | |
| |2 |  MERGE GROUP BY               |             |100      |469 |
 | |
| |3 |   EXCHANGE IN MERGE SORT DISTR|             |100      |462 |
 | |
| |4 |    EXCHANGE OUT DISTR (HASH)  |:EX10000     |100      |448 |
 | |
| |5 |     PX PARTITION ITERATOR     |             |100      |418 |
 | |
| |6 |      MERGE GROUP BY           |             |100      |418 |
 | |
| |7 |       TABLE SCAN              |t1(idx_t1_c2)|500      |387 |
 | |
| =================================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([INTERNAL_FUNCTION(t1.c2, T_FUN_SUM(T_FUN_SUM(t1.c1)))]), filter(nil)
 | |
|   1 - output([INTERNAL_FUNCTION(t1.c2, T_FUN_SUM(T_FUN_SUM(t1.c1)))]), filter(nil), dop=1
 | |
|   2 - output([t1.c2], [T_FUN_SUM(T_FUN_SUM(t1.c1))]), filter(nil), 
 | |
|       group([t1.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(t1.c1))])
 | |
|   3 - output([t1.c2], [T_FUN_SUM(t1.c1)]), filter(nil), sort_keys([t1.c2, ASC]), Local Order
 | |
|   4 - (#keys=1, [t1.c2]), output([t1.c2], [T_FUN_SUM(t1.c1)]), filter(nil), dop=1
 | |
|   5 - output([t1.c2], [T_FUN_SUM(t1.c1)]), filter(nil), 
 | |
|       force partition granule.
 | |
|   6 - output([t1.c2], [T_FUN_SUM(t1.c1)]), filter(nil), 
 | |
|       group([t1.c2]), agg_func([T_FUN_SUM(t1.c1)])
 | |
|   7 - output([t1.c1], [t1.c2]), filter(nil), 
 | |
|       access([t1.c1], [t1.c2]), partitions(p[0-4]), 
 | |
|       is_index_back=false, 
 | |
|       range_key([t1.c2], [t1.c1]), range(MIN,MIN ; MAX,MAX)always true
 | |
| 
 | |
| *************** Case 2(end)  ************** 
 | |
| 
 | |
| ***************   Case 3   ***************
 | |
| 
 | |
| SQL: explain extended select t1.c1 from t1,t2,t3, t1 tt where t1.c1=t3.c1 and t1.c2=tt.c2 and t1.c1+t2.c1=tt.c1; 
 | |
| 
 | |
| ============================================================
 | |
| |ID|OPERATOR                       |NAME    |EST. ROWS|COST|
 | |
| ------------------------------------------------------------
 | |
| |0 |NESTED-LOOP JOIN               |        |487      |7244|
 | |
| |1 | HASH JOIN                     |        |811      |1519|
 | |
| |2 |  PX COORDINATOR               |        |200      |822 |
 | |
| |3 |   EXCHANGE OUT DISTR          |:EX10001|200      |796 |
 | |
| |4 |    HASH JOIN                  |        |200      |741 |
 | |
| |5 |     EXCHANGE IN DISTR         |        |200      |187 |
 | |
| |6 |      EXCHANGE OUT DISTR (PKEY)|:EX10000|200      |176 |
 | |
| |7 |       PX PARTITION ITERATOR   |        |200      |155 |
 | |
| |8 |        TABLE SCAN             |t3      |200      |155 |
 | |
| |9 |     PX PARTITION ITERATOR     |        |500      |387 |
 | |
| |10|      TABLE SCAN               |t1      |500      |387 |
 | |
| |11|  PX COORDINATOR               |        |500      |528 |
 | |
| |12|   EXCHANGE OUT DISTR          |:EX20000|500      |481 |
 | |
| |13|    PX PARTITION ITERATOR      |        |500      |387 |
 | |
| |14|     TABLE SCAN                |tt      |500      |387 |
 | |
| |15| MATERIAL                      |        |300      |281 |
 | |
| |16|  PX COORDINATOR               |        |300      |280 |
 | |
| |17|   EXCHANGE OUT DISTR          |:EX30000|300      |263 |
 | |
| |18|    PX PARTITION ITERATOR      |        |300      |233 |
 | |
| |19|     TABLE SCAN                |t2      |300      |233 |
 | |
| ============================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1]), filter(nil), 
 | |
|       conds([t1.c1 + t2.c1 = tt.c1]), nl_params_(nil), batch_join=false
 | |
|   1 - output([t1.c1], [tt.c1]), filter(nil), 
 | |
|       equal_conds([t1.c2 = tt.c2]), other_conds(nil)
 | |
|   2 - output([t1.c1], [t1.c2]), filter(nil)
 | |
|   3 - output([t1.c1], [t1.c2]), filter(nil), dop=1
 | |
|   4 - output([t1.c1], [t1.c2]), filter(nil), 
 | |
|       equal_conds([t1.c1 = t3.c1]), other_conds(nil)
 | |
|   5 - output([t3.c1]), filter(nil)
 | |
|   6 - (#keys=1, [t3.c1]), output([t3.c1]), filter(nil), dop=1
 | |
|   7 - output([t3.c1]), filter(nil), 
 | |
|       force partition granule.
 | |
|   8 - output([t3.c1]), filter(nil), 
 | |
|       access([t3.c1]), partitions(p[0-1]), 
 | |
|       is_index_back=false, 
 | |
|       range_key([t3.c1]), range(MIN ; MAX)always true
 | |
|   9 - output([t1.c1], [t1.c2]), filter(nil), 
 | |
|       affinitize, force partition granule.
 | |
|   10 - output([t1.c1], [t1.c2]), filter(nil), 
 | |
|       access([t1.c1], [t1.c2]), partitions(p[0-4]), 
 | |
|       is_index_back=false, 
 | |
|       range_key([t1.c1]), range(MIN ; MAX)always true
 | |
|   11 - output([tt.c1], [tt.c2]), filter(nil)
 | |
|   12 - output([tt.c1], [tt.c2]), filter(nil), dop=1
 | |
|   13 - output([tt.c1], [tt.c2]), filter(nil), 
 | |
|       force partition granule.
 | |
|   14 - output([tt.c1], [tt.c2]), filter(nil), 
 | |
|       access([tt.c1], [tt.c2]), partitions(p[0-4]), 
 | |
|       is_index_back=false, 
 | |
|       range_key([tt.c1]), range(MIN ; MAX)always true
 | |
|   15 - output([t2.c1]), filter(nil)
 | |
|   16 - output([t2.c1]), filter(nil)
 | |
|   17 - output([t2.c1]), filter(nil), dop=1
 | |
|   18 - output([t2.c1]), filter(nil), 
 | |
|       force partition granule.
 | |
|   19 - output([t2.c1]), filter(nil), 
 | |
|       access([t2.c1]), partitions(p[0-2]), 
 | |
|       is_index_back=false, 
 | |
|       range_key([t2.c1]), range(MIN ; MAX)always true
 | |
| 
 | |
| *************** Case 3(end)  ************** 
 | |
| 
 | |
| ***************   Case 4   ***************
 | |
| 
 | |
| SQL: explain extended select t1.c1 from t1, (select * from t2 where c2>1 order by c1 limit 10) as t where t1.c1=t.c1; 
 | |
| 
 | |
| ================================================================
 | |
| |ID|OPERATOR                           |NAME    |EST. ROWS|COST|
 | |
| ----------------------------------------------------------------
 | |
| |0 |PX COORDINATOR                     |        |10       |213 |
 | |
| |1 | EXCHANGE OUT DISTR                |:EX10002|10       |212 |
 | |
| |2 |  NESTED-LOOP JOIN                 |        |10       |210 |
 | |
| |3 |   EXCHANGE IN DISTR               |        |10       |144 |
 | |
| |4 |    EXCHANGE OUT DISTR (PKEY)      |:EX10001|10       |143 |
 | |
| |5 |     SUBPLAN SCAN                  |t       |10       |142 |
 | |
| |6 |      LIMIT                        |        |10       |142 |
 | |
| |7 |       EXCHANGE IN MERGE SORT DISTR|        |10       |142 |
 | |
| |8 |        EXCHANGE OUT DISTR         |:EX10000|10       |141 |
 | |
| |9 |         TOP-N SORT                |        |10       |139 |
 | |
| |10|          PX PARTITION ITERATOR    |        |10       |137 |
 | |
| |11|           TABLE SCAN              |t2      |10       |137 |
 | |
| |12|   PX PARTITION ITERATOR           |        |1        |29  |
 | |
| |13|    TABLE GET                      |t1      |1        |29  |
 | |
| ================================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([INTERNAL_FUNCTION(t1.c1)]), filter(nil)
 | |
|   1 - output([INTERNAL_FUNCTION(t1.c1)]), filter(nil), dop=1
 | |
|   2 - output([t1.c1]), filter(nil), 
 | |
|       conds(nil), nl_params_([t.c1]), batch_join=false
 | |
|   3 - output([PARTITION_ID], [t.c1]), filter(nil)
 | |
|   4 - (#keys=1, [t.c1]), output([PARTITION_ID], [t.c1]), filter(nil), is_single, dop=1
 | |
|   5 - output([t.c1]), filter(nil), 
 | |
|       access([t.c1])
 | |
|   6 - output([t2.c1]), filter(nil), limit(10), offset(nil)
 | |
|   7 - output([t2.c1]), filter(nil), sort_keys([t2.c1, ASC])
 | |
|   8 - output([t2.c1]), filter(nil), dop=1
 | |
|   9 - output([t2.c1]), filter(nil), sort_keys([t2.c1, ASC]), topn(10), local merge sort
 | |
|   10 - output([t2.c1]), filter(nil), 
 | |
|       force partition granule.
 | |
|   11 - output([t2.c1]), filter([t2.c2 > 1]), 
 | |
|       access([t2.c1], [t2.c2]), partitions(p[0-2]), 
 | |
|       limit(10), offset(nil), 
 | |
|       is_index_back=false, filter_before_indexback[false], 
 | |
|       range_key([t2.c1]), range(MIN ; MAX)always true
 | |
|   12 - output([t1.c1]), filter(nil), 
 | |
|       affinitize, force partition granule.
 | |
|   13 - output([t1.c1]), filter(nil), 
 | |
|       access([t1.c1]), partitions(p[0-4]), 
 | |
|       is_index_back=false, 
 | |
|       range_key([t1.c1]), range(MIN ; MAX), 
 | |
|       range_cond([t1.c1 = ?])
 | |
| 
 | |
| *************** Case 4(end)  ************** 
 | |
| 
 | |
| ***************   Case 5   ***************
 | |
| 
 | |
| SQL: explain extended select t1.c1 from t1 left join t2 t on t1.c1=t.c1,t2,t3, t1 tt where t1.c1=t3.c1 and t1.c2=tt.c2 and t1.c1+t2.c1=tt.c1; 
 | |
| 
 | |
| ============================================================
 | |
| |ID|OPERATOR                       |NAME    |EST. ROWS|COST|
 | |
| ------------------------------------------------------------
 | |
| |0 |NESTED-LOOP JOIN               |        |487      |7244|
 | |
| |1 | HASH JOIN                     |        |811      |1519|
 | |
| |2 |  PX COORDINATOR               |        |200      |822 |
 | |
| |3 |   EXCHANGE OUT DISTR          |:EX10001|200      |796 |
 | |
| |4 |    HASH JOIN                  |        |200      |741 |
 | |
| |5 |     EXCHANGE IN DISTR         |        |200      |187 |
 | |
| |6 |      EXCHANGE OUT DISTR (PKEY)|:EX10000|200      |176 |
 | |
| |7 |       PX PARTITION ITERATOR   |        |200      |155 |
 | |
| |8 |        TABLE SCAN             |t3      |200      |155 |
 | |
| |9 |     PX PARTITION ITERATOR     |        |500      |387 |
 | |
| |10|      TABLE SCAN               |t1      |500      |387 |
 | |
| |11|  PX COORDINATOR               |        |500      |528 |
 | |
| |12|   EXCHANGE OUT DISTR          |:EX20000|500      |481 |
 | |
| |13|    PX PARTITION ITERATOR      |        |500      |387 |
 | |
| |14|     TABLE SCAN                |tt      |500      |387 |
 | |
| |15| MATERIAL                      |        |300      |281 |
 | |
| |16|  PX COORDINATOR               |        |300      |280 |
 | |
| |17|   EXCHANGE OUT DISTR          |:EX30000|300      |263 |
 | |
| |18|    PX PARTITION ITERATOR      |        |300      |233 |
 | |
| |19|     TABLE SCAN                |t2      |300      |233 |
 | |
| ============================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([t1.c1]), filter(nil), 
 | |
|       conds([t1.c1 + t2.c1 = tt.c1]), nl_params_(nil), batch_join=false
 | |
|   1 - output([t1.c1], [tt.c1]), filter(nil), 
 | |
|       equal_conds([t1.c2 = tt.c2]), other_conds(nil)
 | |
|   2 - output([t1.c1], [t1.c2]), filter(nil)
 | |
|   3 - output([t1.c1], [t1.c2]), filter(nil), dop=1
 | |
|   4 - output([t1.c1], [t1.c2]), filter(nil), 
 | |
|       equal_conds([t1.c1 = t3.c1]), other_conds(nil)
 | |
|   5 - output([t3.c1]), filter(nil)
 | |
|   6 - (#keys=1, [t3.c1]), output([t3.c1]), filter(nil), dop=1
 | |
|   7 - output([t3.c1]), filter(nil), 
 | |
|       force partition granule.
 | |
|   8 - output([t3.c1]), filter(nil), 
 | |
|       access([t3.c1]), partitions(p[0-1]), 
 | |
|       is_index_back=false, 
 | |
|       range_key([t3.c1]), range(MIN ; MAX)always true
 | |
|   9 - output([t1.c1], [t1.c2]), filter(nil), 
 | |
|       affinitize, force partition granule.
 | |
|   10 - output([t1.c1], [t1.c2]), filter(nil), 
 | |
|       access([t1.c1], [t1.c2]), partitions(p[0-4]), 
 | |
|       is_index_back=false, 
 | |
|       range_key([t1.c1]), range(MIN ; MAX)always true
 | |
|   11 - output([tt.c1], [tt.c2]), filter(nil)
 | |
|   12 - output([tt.c1], [tt.c2]), filter(nil), dop=1
 | |
|   13 - output([tt.c1], [tt.c2]), filter(nil), 
 | |
|       force partition granule.
 | |
|   14 - output([tt.c1], [tt.c2]), filter(nil), 
 | |
|       access([tt.c1], [tt.c2]), partitions(p[0-4]), 
 | |
|       is_index_back=false, 
 | |
|       range_key([tt.c1]), range(MIN ; MAX)always true
 | |
|   15 - output([t2.c1]), filter(nil)
 | |
|   16 - output([t2.c1]), filter(nil)
 | |
|   17 - output([t2.c1]), filter(nil), dop=1
 | |
|   18 - output([t2.c1]), filter(nil), 
 | |
|       force partition granule.
 | |
|   19 - output([t2.c1]), filter(nil), 
 | |
|       access([t2.c1]), partitions(p[0-2]), 
 | |
|       is_index_back=false, 
 | |
|       range_key([t2.c1]), range(MIN ; MAX)always true
 | |
| 
 | |
| *************** Case 5(end)  ************** 
 | |
| 
 | 
