[scn] fix failure of mittest after refresh feature scn
This commit is contained in:
		| @ -16,29 +16,29 @@ Query Plan | ||||
| ------------------------------------------- | ||||
| |0 |PX COORDINATOR               |        | | ||||
| |1 | EXCHANGE OUT DISTR          |:EX10001| | ||||
| |2 |  HASH JOIN                  |        | | ||||
| |3 |   PX PARTITION ITERATOR     |        | | ||||
| |4 |    TABLE SCAN               |t1      | | ||||
| |5 |   EXCHANGE IN DISTR         |        | | ||||
| |6 |    EXCHANGE OUT DISTR (PKEY)|:EX10000| | ||||
| |7 |     PX BLOCK ITERATOR       |        | | ||||
| |8 |      TABLE SCAN             |t2      | | ||||
| |2 |  NESTED-LOOP JOIN           |        | | ||||
| |3 |   EXCHANGE IN DISTR         |        | | ||||
| |4 |    EXCHANGE OUT DISTR (PKEY)|:EX10000| | ||||
| |5 |     PX BLOCK ITERATOR       |        | | ||||
| |6 |      TABLE SCAN             |t2      | | ||||
| |7 |   PX PARTITION ITERATOR     |        | | ||||
| |8 |    TABLE GET                |t1      | | ||||
| =========================================== | ||||
|  | ||||
| Outputs & filters:  | ||||
| ------------------------------------- | ||||
|   0 - output([INTERNAL_FUNCTION(t1.c1, 1, t2.c1, 1)]), filter(nil), rowset=256 | ||||
|   1 - output([INTERNAL_FUNCTION(t1.c1, 1, t2.c1, 1)]), filter(nil), rowset=256, dop=3 | ||||
|   2 - output([t1.c1], [t2.c1]), filter(nil), rowset=256,  | ||||
|       equal_conds([t1.c1 = t2.c1]), other_conds(nil) | ||||
|   3 - output([t1.c1]), filter(nil), rowset=256 | ||||
|   4 - output([t1.c1]), filter(nil), rowset=256,  | ||||
|       access([t1.c1]), partitions(p[0-9]) | ||||
|   2 - output([t2.c1], [t1.c1]), filter(nil), rowset=256, | ||||
|       conds(nil), nl_params_([t2.c1]) | ||||
|   3 - output([t2.c1], [PARTITION_ID]), filter(nil), rowset=256 | ||||
|   4 - (#keys=1, [t2.c1]), output([t2.c1], [PARTITION_ID]), filter(nil), rowset=256, dop=3 | ||||
|   5 - output([t2.c1]), filter(nil), rowset=256 | ||||
|   6 - (#keys=1, [t2.c1]), output([t2.c1]), filter(nil), rowset=256, dop=3 | ||||
|   7 - output([t2.c1]), filter(nil), rowset=256 | ||||
|   8 - output([t2.c1]), filter(nil), rowset=256,  | ||||
|   6 - output([t2.c1]), filter(nil), rowset=256, | ||||
|       access([t2.c1]), partitions(p[0-5]) | ||||
|   7 - output([t1.c1]), filter(nil), rowset=256 | ||||
|   8 - output([t1.c1]), filter(nil), rowset=256, | ||||
|       access([t1.c1]), partitions(p[0-9]) | ||||
|  | ||||
| select /*+ USE_PX parallel(3) */* from | ||||
| (select c1,count(*) over(partition by c1) c2 from | ||||
| @ -58,24 +58,24 @@ c1	c2	c1	c2 | ||||
| explain basic | ||||
| select a.c2,count(*) from (select /*+ USE_PX parallel(3) PQ_DISTRIBUTE(b HASH HASH) */a.c1,a.c2,b.c1 c3,b.c2 c4 from t1 a join t2 b on a.c1=b.c1)a group by a.c2; | ||||
| Query Plan | ||||
| ================================================== | ||||
| |ID|OPERATOR                            |NAME    | | ||||
| -------------------------------------------------- | ||||
| |0 |PX COORDINATOR                      |        | | ||||
| |1 | EXCHANGE OUT DISTR                 |:EX10002| | ||||
| |2 |  HASH GROUP BY                     |        | | ||||
| |3 |   EXCHANGE IN DISTR                |        | | ||||
| |4 |    EXCHANGE OUT DISTR (HASH)       |:EX10001| | ||||
| |5 |     HASH GROUP BY                  |        | | ||||
| |6 |      HASH JOIN                     |        | | ||||
| |7 |       PART JOIN FILTER CREATE      |:BF0000 | | ||||
| |8 |        EXCHANGE IN DISTR           |        | | ||||
| |9 |         EXCHANGE OUT DISTR (PKEY)  |:EX10000| | ||||
| |10|          PX BLOCK ITERATOR         |        | | ||||
| |11|           TABLE SCAN               |b       | | ||||
| |12|       PX PARTITION HASH JOIN-FILTER|:BF0000 | | ||||
| |13|        TABLE SCAN                  |a       | | ||||
| ================================================== | ||||
| ================================================ | ||||
| |ID|OPERATOR                          |NAME    | | ||||
| ------------------------------------------------ | ||||
| |0 |PX COORDINATOR                    |        | | ||||
| |1 | EXCHANGE OUT DISTR               |:EX10002| | ||||
| |2 |  HASH GROUP BY                   |        | | ||||
| |3 |   EXCHANGE IN DISTR              |        | | ||||
| |4 |    EXCHANGE OUT DISTR (HASH)     |:EX10001| | ||||
| |5 |     MATERIAL                     |        | | ||||
| |6 |      HASH GROUP BY               |        | | ||||
| |7 |       NESTED-LOOP JOIN           |        | | ||||
| |8 |        EXCHANGE IN DISTR         |        | | ||||
| |9 |         EXCHANGE OUT DISTR (PKEY)|:EX10000| | ||||
| |10|          PX BLOCK ITERATOR       |        | | ||||
| |11|           TABLE SCAN             |b       | | ||||
| |12|        PX PARTITION ITERATOR     |        | | ||||
| |13|         TABLE GET                |a       | | ||||
| ================================================ | ||||
|  | ||||
| Outputs & filters:  | ||||
| ------------------------------------- | ||||
| @ -85,19 +85,19 @@ Outputs & filters: | ||||
|       group([a.c2]), agg_func([T_FUN_COUNT_SUM(T_FUN_COUNT(*))]) | ||||
|   3 - output([a.c2], [T_FUN_COUNT(*)]), filter(nil), rowset=256 | ||||
|   4 - (#keys=1, [a.c2]), output([a.c2], [T_FUN_COUNT(*)]), filter(nil), rowset=256, dop=3 | ||||
|   5 - output([a.c2], [T_FUN_COUNT(*)]), filter(nil), rowset=256,  | ||||
|   5 - output([a.c2], [T_FUN_COUNT(*)]), filter(nil), rowset=256 | ||||
|   6 - output([a.c2], [T_FUN_COUNT(*)]), filter(nil), rowset=256, | ||||
|       group([a.c2]), agg_func([T_FUN_COUNT(*)]) | ||||
|   6 - output([a.c2]), filter(nil), rowset=256,  | ||||
|       equal_conds([a.c1 = b.c1]), other_conds(nil) | ||||
|   7 - output([b.c1]), filter(nil), rowset=256 | ||||
|   8 - output([b.c1]), filter(nil), rowset=256 | ||||
|   9 - (#keys=1, [b.c1]), output([b.c1]), filter(nil), rowset=256, dop=3 | ||||
|   7 - output([a.c2]), filter(nil), rowset=256, | ||||
|       conds(nil), nl_params_([b.c1]) | ||||
|   8 - output([PARTITION_ID], [b.c1]), filter(nil), rowset=256 | ||||
|   9 - (#keys=1, [b.c1]), output([PARTITION_ID], [b.c1]), filter(nil), rowset=256, dop=3 | ||||
|   10 - output([b.c1]), filter(nil), rowset=256 | ||||
|   11 - output([b.c1]), filter(nil), rowset=256,  | ||||
|       access([b.c1]), partitions(p[0-5]) | ||||
|   12 - output([a.c1], [a.c2]), filter(nil), rowset=256 | ||||
|   13 - output([a.c1], [a.c2], [PARTITION_ID]), filter(nil), rowset=256,  | ||||
|       access([a.c1], [a.c2]), partitions(p[0-9]) | ||||
|   12 - output([a.c2]), filter(nil), rowset=256 | ||||
|   13 - output([a.c2]), filter(nil), rowset=256, | ||||
|       access([a.c2]), partitions(p[0-9]) | ||||
|  | ||||
| select a.c2,count(*) from (select /*+ USE_PX parallel(3) PQ_DISTRIBUTE(b HASH HASH) */a.c1,a.c2,b.c1 c3,b.c2 c4 from t1 a join t2 b on a.c1=b.c1)a group by a.c2; | ||||
| c2	count(*) | ||||
|  | ||||
| @ -6,16 +6,16 @@ Query Plan | ||||
| ===================================================================== | ||||
| |ID|OPERATOR                            |NAME        |EST. ROWS|COST| | ||||
| --------------------------------------------------------------------- | ||||
| |0 |TEMP TABLE TRANSFORMATION           |            |1        |5   | | ||||
| |1 | PX COORDINATOR                     |            |1        |4   | | ||||
| |2 |  EXCHANGE OUT DISTR                |:EX10001    |1        |4   | | ||||
| |3 |   TEMP TABLE INSERT                |TEMP1       |1        |3   | | ||||
| |4 |    HASH GROUP BY                   |            |1        |3   | | ||||
| |5 |     EXCHANGE IN DISTR              |            |2        |3   | | ||||
| |6 |      EXCHANGE OUT DISTR (HASH)     |:EX10000    |2        |3   | | ||||
| |7 |       HASH GROUP BY                |            |2        |2   | | ||||
| |8 |        PX BLOCK ITERATOR           |            |1        |1   | | ||||
| |9 |         TABLE SCAN                 |t1          |1        |1   | | ||||
| |0 |TEMP TABLE TRANSFORMATION           |            |1        |27  | | ||||
| |1 | PX COORDINATOR                     |            |1        |26  | | ||||
| |2 |  EXCHANGE OUT DISTR                |:EX10001    |1        |25  | | ||||
| |3 |   TEMP TABLE INSERT                |TEMP1       |1        |25  | | ||||
| |4 |    HASH GROUP BY                   |            |1        |25  | | ||||
| |5 |     EXCHANGE IN DISTR              |            |2        |25  | | ||||
| |6 |      EXCHANGE OUT DISTR (HASH)     |:EX10000    |2        |24  | | ||||
| |7 |       HASH GROUP BY                |            |2        |23  | | ||||
| |8 |        PX BLOCK ITERATOR           |            |1        |23  | | ||||
| |9 |         TABLE SCAN                 |t1          |1        |23  | | ||||
| |10| PX COORDINATOR                     |            |1        |2   | | ||||
| |11|  EXCHANGE OUT DISTR                |:EX20002    |1        |2   | | ||||
| |12|   SHARED HASH JOIN                 |            |1        |1   | | ||||
| @ -63,102 +63,113 @@ Outputs & filters: | ||||
|  | ||||
| explain select /*+ use_px parallel(2) use_merge(a b) */ b.c2, sum(a.c3) from (select /*+ NO_USE_HASH_AGGREGATION */ c1, c2, count(*) c3 from t1 group by 1, 2) a, t2 b where a.c1 = b.c1 group by 1; | ||||
| Query Plan | ||||
| ================================================================== | ||||
| |ID|OPERATOR                             |NAME    |EST. ROWS|COST| | ||||
| ------------------------------------------------------------------ | ||||
| |0 |PX COORDINATOR                       |        |1        |5   | | ||||
| |1 | EXCHANGE OUT DISTR                  |:EX10003|1        |5   | | ||||
| |2 |  HASH GROUP BY                      |        |1        |5   | | ||||
| |3 |   EXCHANGE IN DISTR                 |        |2        |5   | | ||||
| |4 |    EXCHANGE OUT DISTR (HASH)        |:EX10002|2        |4   | | ||||
| |5 |     HASH GROUP BY                   |        |2        |4   | | ||||
| |6 |      SUBPLAN SCAN                   |VIEW1   |1        |3   | | ||||
| |7 |       MERGE GROUP BY                |        |1        |3   | | ||||
| |8 |        SORT                         |        |1        |3   | | ||||
| |9 |         MERGE JOIN                  |        |1        |3   | | ||||
| |10|          SORT                       |        |1        |2   | | ||||
| |11|           EXCHANGE IN DISTR         |        |1        |2   | | ||||
| |12|            EXCHANGE OUT DISTR (HASH)|:EX10000|1        |2   | | ||||
| |13|             PX BLOCK ITERATOR       |        |1        |1   | | ||||
| |14|              TABLE SCAN             |b       |1        |1   | | ||||
| |15|          SORT                       |        |1        |2   | | ||||
| |16|           EXCHANGE IN DISTR         |        |1        |2   | | ||||
| |17|            EXCHANGE OUT DISTR (HASH)|:EX10001|1        |2   | | ||||
| |18|             PX BLOCK ITERATOR       |        |1        |1   | | ||||
| |19|              TABLE SCAN             |t1      |1        |1   | | ||||
| ================================================================== | ||||
| ====================================================================== | ||||
| |ID|OPERATOR                                 |NAME    |EST. ROWS|COST| | ||||
| ---------------------------------------------------------------------- | ||||
| |0 |PX COORDINATOR                           |        |1        |49  | | ||||
| |1 | EXCHANGE OUT DISTR                      |:EX10003|1        |49  | | ||||
| |2 |  HASH GROUP BY                          |        |1        |49  | | ||||
| |3 |   EXCHANGE IN DISTR                     |        |2        |49  | | ||||
| |4 |    EXCHANGE OUT DISTR (HASH)            |:EX10002|2        |48  | | ||||
| |5 |     MATERIAL                            |        |2        |48  | | ||||
| |6 |      HASH GROUP BY                      |        |2        |48  | | ||||
| |7 |       MERGE JOIN                        |        |1        |47  | | ||||
| |8 |        EXCHANGE IN MERGE SORT DISTR     |        |1        |25  | | ||||
| |9 |         EXCHANGE OUT DISTR (BROADCAST)  |:EX10001|1        |24  | | ||||
| |10|          MATERIAL                       |        |1        |24  | | ||||
| |11|           SUBPLAN SCAN                  |a       |1        |24  | | ||||
| |12|            MERGE GROUP BY               |        |1        |24  | | ||||
| |13|             EXCHANGE IN MERGE SORT DISTR|        |2        |24  | | ||||
| |14|              EXCHANGE OUT DISTR (HASH)  |:EX10000|2        |24  | | ||||
| |15|               MERGE GROUP BY            |        |2        |23  | | ||||
| |16|                SORT                     |        |1        |23  | | ||||
| |17|                 PX BLOCK ITERATOR       |        |1        |23  | | ||||
| |18|                  TABLE SCAN             |t1      |1        |23  | | ||||
| |19|        SORT                             |        |1        |23  | | ||||
| |20|         PX BLOCK ITERATOR               |        |1        |23  | | ||||
| |21|          TABLE SCAN                     |b       |1        |23  | | ||||
| ====================================================================== | ||||
|  | ||||
| Outputs & filters:  | ||||
| ------------------------------------- | ||||
|   0 - output([INTERNAL_FUNCTION(VIEW1.b.c2, T_FUN_SUM(T_FUN_SUM(VIEW1.a.c3)))]), filter(nil), rowset=256 | ||||
|   1 - output([INTERNAL_FUNCTION(VIEW1.b.c2, T_FUN_SUM(T_FUN_SUM(VIEW1.a.c3)))]), filter(nil), rowset=256, dop=2 | ||||
|   2 - output([VIEW1.b.c2], [T_FUN_SUM(T_FUN_SUM(VIEW1.a.c3))]), filter(nil), rowset=256,  | ||||
|       group([VIEW1.b.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(VIEW1.a.c3))]) | ||||
|   3 - output([VIEW1.b.c2], [T_FUN_SUM(VIEW1.a.c3)]), filter(nil), rowset=256 | ||||
|   4 - (#keys=1, [VIEW1.b.c2]), output([VIEW1.b.c2], [T_FUN_SUM(VIEW1.a.c3)]), filter(nil), rowset=256, dop=2 | ||||
|   5 - output([VIEW1.b.c2], [T_FUN_SUM(VIEW1.a.c3)]), filter(nil), rowset=256,  | ||||
|       group([VIEW1.b.c2]), agg_func([T_FUN_SUM(VIEW1.a.c3)]) | ||||
|   6 - output([VIEW1.b.c2], [VIEW1.a.c3]), filter(nil), rowset=256,  | ||||
|       access([VIEW1.b.c2], [VIEW1.a.c3]) | ||||
|   7 - output([b.c2], [T_FUN_COUNT(*)]), filter(nil), rowset=256,  | ||||
|       group([b.__pk_increment], [t1.c2]), agg_func([T_FUN_COUNT(*)]) | ||||
|   8 - output([b.__pk_increment], [t1.c2], [b.c2]), filter(nil), rowset=256, sort_keys([b.__pk_increment, ASC], [t1.c2, ASC]) | ||||
|   9 - output([b.__pk_increment], [t1.c2], [b.c2]), filter(nil), rowset=256,  | ||||
|       equal_conds([t1.c1 = b.c1]), other_conds(nil) | ||||
|   10 - output([b.__pk_increment], [b.c2], [b.c1]), filter(nil), rowset=256, sort_keys([b.c1, ASC]) | ||||
|   11 - output([b.__pk_increment], [b.c2], [b.c1]), filter(nil), rowset=256 | ||||
|   12 - (#keys=1, [b.c1]), output([b.__pk_increment], [b.c2], [b.c1]), filter(nil), rowset=256, dop=2 | ||||
|   13 - output([b.__pk_increment], [b.c1], [b.c2]), filter(nil), rowset=256 | ||||
|   14 - output([b.__pk_increment], [b.c1], [b.c2]), filter(nil), rowset=256,  | ||||
|       access([b.__pk_increment], [b.c1], [b.c2]), partitions(p0) | ||||
|   15 - output([t1.c2], [t1.c1]), filter(nil), rowset=256, sort_keys([t1.c1, ASC]) | ||||
|   16 - output([t1.c2], [t1.c1]), filter(nil), rowset=256 | ||||
|   17 - (#keys=1, [t1.c1]), output([t1.c2], [t1.c1]), filter(nil), rowset=256, dop=2 | ||||
|   18 - output([t1.c1], [t1.c2]), filter(nil), rowset=256 | ||||
|   19 - output([t1.c1], [t1.c2]), filter(nil), rowset=256,  | ||||
|   0 - output([INTERNAL_FUNCTION(b.c2, T_FUN_SUM(T_FUN_SUM(a.c3)))]), filter(nil), rowset=256 | ||||
|   1 - output([INTERNAL_FUNCTION(b.c2, T_FUN_SUM(T_FUN_SUM(a.c3)))]), filter(nil), rowset=256, dop=2 | ||||
|   2 - output([b.c2], [T_FUN_SUM(T_FUN_SUM(a.c3))]), filter(nil), rowset=256, | ||||
|       group([b.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(a.c3))]) | ||||
|   3 - output([b.c2], [T_FUN_SUM(a.c3)]), filter(nil), rowset=256 | ||||
|   4 - (#keys=1, [b.c2]), output([b.c2], [T_FUN_SUM(a.c3)]), filter(nil), rowset=256, dop=2 | ||||
|   5 - output([b.c2], [T_FUN_SUM(a.c3)]), filter(nil), rowset=256 | ||||
|   6 - output([b.c2], [T_FUN_SUM(a.c3)]), filter(nil), rowset=256, | ||||
|       group([b.c2]), agg_func([T_FUN_SUM(a.c3)]) | ||||
|   7 - output([b.c2], [a.c3]), filter(nil), rowset=256, | ||||
|       equal_conds([a.c1 = b.c1]), other_conds(nil) | ||||
|   8 - output([a.c1], [a.c3]), filter(nil), rowset=256, sort_keys([a.c1, ASC]) | ||||
|   9 - output([a.c1], [a.c3]), filter(nil), rowset=256, dop=2 | ||||
|   10 - output([a.c1], [a.c3]), filter(nil), rowset=256 | ||||
|   11 - output([a.c1], [a.c3]), filter(nil), rowset=256, | ||||
|       access([a.c1], [a.c3]) | ||||
|   12 - output([t1.c1], [T_FUN_COUNT_SUM(T_FUN_COUNT(*))]), filter(nil), rowset=256, | ||||
|       group([t1.c1], [t1.c2]), agg_func([T_FUN_COUNT_SUM(T_FUN_COUNT(*))]) | ||||
|   13 - output([t1.c1], [t1.c2], [T_FUN_COUNT(*)]), filter(nil), rowset=256, sort_keys([t1.c1, ASC], [t1.c2, ASC]) | ||||
|   14 - (#keys=2, [t1.c1], [t1.c2]), output([t1.c1], [t1.c2], [T_FUN_COUNT(*)]), filter(nil), rowset=256, dop=2 | ||||
|   15 - output([t1.c1], [t1.c2], [T_FUN_COUNT(*)]), filter(nil), rowset=256, | ||||
|       group([t1.c1], [t1.c2]), agg_func([T_FUN_COUNT(*)]) | ||||
|   16 - output([t1.c1], [t1.c2]), filter(nil), rowset=256, sort_keys([t1.c1, ASC], [t1.c2, ASC]) | ||||
|   17 - output([t1.c1], [t1.c2]), filter(nil), rowset=256 | ||||
|   18 - output([t1.c1], [t1.c2]), filter(nil), rowset=256, | ||||
|       access([t1.c1], [t1.c2]), partitions(p0) | ||||
|   19 - output([b.c2], [b.c1]), filter(nil), rowset=256, sort_keys([b.c1, ASC]) | ||||
|   20 - output([b.c1], [b.c2]), filter(nil), rowset=256 | ||||
|   21 - output([b.c1], [b.c2]), filter(nil), rowset=256, | ||||
|       access([b.c1], [b.c2]), partitions(p0) | ||||
|  | ||||
| explain select /*+ use_px parallel(2) use_merge(a b) */ * from (select /*+ NO_USE_HASH_AGGREGATION */ c1, c2, count(*) c3 from t1 group by 1, 2) a, t2 b where a.c1 = b.c1; | ||||
| Query Plan | ||||
| ============================================================= | ||||
| |ID|OPERATOR                        |NAME    |EST. ROWS|COST| | ||||
| ------------------------------------------------------------- | ||||
| |0 |PX COORDINATOR                  |        |1        |5   | | ||||
| |1 | EXCHANGE OUT DISTR             |:EX10002|1        |4   | | ||||
| |2 |  MERGE GROUP BY                |        |1        |4   | | ||||
| |3 |   SORT                         |        |1        |4   | | ||||
| |4 |    MERGE JOIN                  |        |1        |4   | | ||||
| |5 |     SORT                       |        |1        |2   | | ||||
| |6 |      EXCHANGE IN DISTR         |        |1        |2   | | ||||
| |7 |       EXCHANGE OUT DISTR (HASH)|:EX10000|1        |2   | | ||||
| |8 |        PX BLOCK ITERATOR       |        |1        |1   | | ||||
| |9 |         TABLE SCAN             |t1      |1        |1   | | ||||
| |10|     SORT                       |        |1        |2   | | ||||
| |11|      EXCHANGE IN DISTR         |        |1        |2   | | ||||
| |12|       EXCHANGE OUT DISTR (HASH)|:EX10001|1        |2   | | ||||
| |13|        PX BLOCK ITERATOR       |        |1        |1   | | ||||
| |14|         TABLE SCAN             |b       |1        |1   | | ||||
| ============================================================= | ||||
| ================================================================= | ||||
| |ID|OPERATOR                            |NAME    |EST. ROWS|COST| | ||||
| ----------------------------------------------------------------- | ||||
| |0 |PX COORDINATOR                      |        |1        |50  | | ||||
| |1 | EXCHANGE OUT DISTR                 |:EX10002|1        |49  | | ||||
| |2 |  MERGE JOIN                        |        |1        |48  | | ||||
| |3 |   EXCHANGE IN MERGE SORT DISTR     |        |1        |25  | | ||||
| |4 |    EXCHANGE OUT DISTR (BROADCAST)  |:EX10001|1        |25  | | ||||
| |5 |     MATERIAL                       |        |1        |25  | | ||||
| |6 |      SUBPLAN SCAN                  |a       |1        |25  | | ||||
| |7 |       MERGE GROUP BY               |        |1        |25  | | ||||
| |8 |        EXCHANGE IN MERGE SORT DISTR|        |2        |25  | | ||||
| |9 |         EXCHANGE OUT DISTR (HASH)  |:EX10000|2        |24  | | ||||
| |10|          MERGE GROUP BY            |        |2        |23  | | ||||
| |11|           SORT                     |        |1        |23  | | ||||
| |12|            PX BLOCK ITERATOR       |        |1        |23  | | ||||
| |13|             TABLE SCAN             |t1      |1        |23  | | ||||
| |14|   SORT                             |        |1        |23  | | ||||
| |15|    PX BLOCK ITERATOR               |        |1        |23  | | ||||
| |16|     TABLE SCAN                     |b       |1        |23  | | ||||
| ================================================================= | ||||
|  | ||||
| Outputs & filters:  | ||||
| ------------------------------------- | ||||
|   0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, T_FUN_COUNT(*), b.c1, b.c2, b.c3)]), filter(nil), rowset=256 | ||||
|   1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, T_FUN_COUNT(*), b.c1, b.c2, b.c3)]), filter(nil), rowset=256, dop=2 | ||||
|   2 - output([t1.c2], [T_FUN_COUNT(*)], [t1.c1], [b.c1], [b.c2], [b.c3]), filter(nil), rowset=256,  | ||||
|       group([b.__pk_increment], [t1.c2]), agg_func([T_FUN_COUNT(*)]) | ||||
|   3 - output([t1.c2], [b.__pk_increment], [t1.c1], [b.c1], [b.c2], [b.c3]), filter(nil), rowset=256, sort_keys([b.__pk_increment, ASC], [t1.c2, ASC]) | ||||
|   4 - output([t1.c2], [b.__pk_increment], [t1.c1], [b.c1], [b.c2], [b.c3]), filter(nil), rowset=256,  | ||||
|       equal_conds([t1.c1 = b.c1]), other_conds(nil) | ||||
|   5 - output([t1.c2], [t1.c1]), filter(nil), rowset=256, sort_keys([t1.c1, ASC]) | ||||
|   6 - output([t1.c2], [t1.c1]), filter(nil), rowset=256 | ||||
|   7 - (#keys=1, [t1.c1]), output([t1.c2], [t1.c1]), filter(nil), rowset=256, dop=2 | ||||
|   8 - output([t1.c1], [t1.c2]), filter(nil), rowset=256 | ||||
|   9 - output([t1.c1], [t1.c2]), filter(nil), rowset=256,  | ||||
|   0 - output([INTERNAL_FUNCTION(a.c1, a.c2, a.c3, b.c1, b.c2, b.c3)]), filter(nil), rowset=256 | ||||
|   1 - output([INTERNAL_FUNCTION(a.c1, a.c2, a.c3, b.c1, b.c2, b.c3)]), filter(nil), rowset=256, dop=2 | ||||
|   2 - output([a.c1], [b.c1], [a.c2], [a.c3], [b.c2], [b.c3]), filter(nil), rowset=256, | ||||
|       equal_conds([a.c1 = b.c1]), other_conds(nil) | ||||
|   3 - output([a.c1], [a.c2], [a.c3]), filter(nil), rowset=256, sort_keys([a.c1, ASC]) | ||||
|   4 - output([a.c1], [a.c2], [a.c3]), filter(nil), rowset=256, dop=2 | ||||
|   5 - output([a.c1], [a.c2], [a.c3]), filter(nil), rowset=256 | ||||
|   6 - output([a.c1], [a.c2], [a.c3]), filter(nil), rowset=256, | ||||
|       access([a.c1], [a.c2], [a.c3]) | ||||
|   7 - output([t1.c1], [t1.c2], [T_FUN_COUNT_SUM(T_FUN_COUNT(*))]), filter(nil), rowset=256, | ||||
|       group([t1.c1], [t1.c2]), agg_func([T_FUN_COUNT_SUM(T_FUN_COUNT(*))]) | ||||
|   8 - output([t1.c1], [t1.c2], [T_FUN_COUNT(*)]), filter(nil), rowset=256, sort_keys([t1.c1, ASC], [t1.c2, ASC]) | ||||
|   9 - (#keys=2, [t1.c1], [t1.c2]), output([t1.c1], [t1.c2], [T_FUN_COUNT(*)]), filter(nil), rowset=256, dop=2 | ||||
|   10 - output([t1.c1], [t1.c2], [T_FUN_COUNT(*)]), filter(nil), rowset=256, | ||||
|       group([t1.c1], [t1.c2]), agg_func([T_FUN_COUNT(*)]) | ||||
|   11 - output([t1.c1], [t1.c2]), filter(nil), rowset=256, sort_keys([t1.c1, ASC], [t1.c2, ASC]) | ||||
|   12 - output([t1.c1], [t1.c2]), filter(nil), rowset=256 | ||||
|   13 - output([t1.c1], [t1.c2]), filter(nil), rowset=256, | ||||
|       access([t1.c1], [t1.c2]), partitions(p0) | ||||
|   10 - output([b.__pk_increment], [b.c1], [b.c2], [b.c3]), filter(nil), rowset=256, sort_keys([b.c1, ASC]) | ||||
|   11 - output([b.__pk_increment], [b.c1], [b.c2], [b.c3]), filter(nil), rowset=256 | ||||
|   12 - (#keys=1, [b.c1]), output([b.__pk_increment], [b.c1], [b.c2], [b.c3]), filter(nil), rowset=256, dop=2 | ||||
|   13 - output([b.__pk_increment], [b.c1], [b.c2], [b.c3]), filter(nil), rowset=256 | ||||
|   14 - output([b.__pk_increment], [b.c1], [b.c2], [b.c3]), filter(nil), rowset=256,  | ||||
|       access([b.__pk_increment], [b.c1], [b.c2], [b.c3]), partitions(p0) | ||||
|   14 - output([b.c1], [b.c2], [b.c3]), filter(nil), rowset=256, sort_keys([b.c1, ASC]) | ||||
|   15 - output([b.c1], [b.c2], [b.c3]), filter(nil), rowset=256 | ||||
|   16 - output([b.c1], [b.c2], [b.c3]), filter(nil), rowset=256, | ||||
|       access([b.c1], [b.c2], [b.c3]), partitions(p0) | ||||
|  | ||||
|  | ||||
| @ -10,10 +10,10 @@ Query Plan | ||||
| ==================================================== | ||||
| |ID|OPERATOR               |NAME    |EST. ROWS|COST| | ||||
| ---------------------------------------------------- | ||||
| |0 |PX COORDINATOR         |        |1        |9   | | ||||
| |1 | EXCHANGE OUT DISTR    |:EX10000|1        |8   | | ||||
| |2 |  PX PARTITION ITERATOR|        |1        |7   | | ||||
| |3 |   TABLE SCAN          |t1      |1        |7   | | ||||
| |0 |PX COORDINATOR         |        |1        |184 | | ||||
| |1 | EXCHANGE OUT DISTR    |:EX10000|1        |184 | | ||||
| |2 |  PX PARTITION ITERATOR|        |1        |183 | | ||||
| |3 |   TABLE SCAN          |t1      |1        |183 | | ||||
| ==================================================== | ||||
|  | ||||
| Outputs & filters:  | ||||
| @ -29,10 +29,10 @@ Query Plan | ||||
| ==================================================== | ||||
| |ID|OPERATOR               |NAME    |EST. ROWS|COST| | ||||
| ---------------------------------------------------- | ||||
| |0 |PX COORDINATOR         |        |1        |9   | | ||||
| |1 | EXCHANGE OUT DISTR    |:EX10000|1        |8   | | ||||
| |2 |  PX PARTITION ITERATOR|        |1        |7   | | ||||
| |3 |   TABLE SCAN          |t1      |1        |7   | | ||||
| |0 |PX COORDINATOR         |        |1        |184 | | ||||
| |1 | EXCHANGE OUT DISTR    |:EX10000|1        |184 | | ||||
| |2 |  PX PARTITION ITERATOR|        |1        |183 | | ||||
| |3 |   TABLE SCAN          |t1      |1        |183 | | ||||
| ==================================================== | ||||
|  | ||||
| Outputs & filters:  | ||||
| @ -48,10 +48,10 @@ Query Plan | ||||
| ================================================ | ||||
| |ID|OPERATOR           |NAME    |EST. ROWS|COST| | ||||
| ------------------------------------------------ | ||||
| |0 |PX COORDINATOR     |        |1        |1   | | ||||
| |1 | EXCHANGE OUT DISTR|:EX10000|1        |1   | | ||||
| |2 |  PX BLOCK ITERATOR|        |1        |1   | | ||||
| |3 |   TABLE SCAN      |t1      |1        |1   | | ||||
| |0 |PX COORDINATOR     |        |1        |13  | | ||||
| |1 | EXCHANGE OUT DISTR|:EX10000|1        |13  | | ||||
| |2 |  PX BLOCK ITERATOR|        |1        |13  | | ||||
| |3 |   TABLE SCAN      |t1      |1        |13  | | ||||
| ================================================ | ||||
|  | ||||
| Outputs & filters:  | ||||
| @ -67,10 +67,10 @@ Query Plan | ||||
| ==================================================== | ||||
| |ID|OPERATOR               |NAME    |EST. ROWS|COST| | ||||
| ---------------------------------------------------- | ||||
| |0 |PX COORDINATOR         |        |1        |9   | | ||||
| |1 | EXCHANGE OUT DISTR    |:EX10000|1        |8   | | ||||
| |2 |  PX PARTITION ITERATOR|        |1        |7   | | ||||
| |3 |   TABLE SCAN          |t1      |1        |7   | | ||||
| |0 |PX COORDINATOR         |        |1        |184 | | ||||
| |1 | EXCHANGE OUT DISTR    |:EX10000|1        |184 | | ||||
| |2 |  PX PARTITION ITERATOR|        |1        |183 | | ||||
| |3 |   TABLE SCAN          |t1      |1        |183 | | ||||
| ==================================================== | ||||
|  | ||||
| Outputs & filters:  | ||||
| @ -86,10 +86,10 @@ Query Plan | ||||
| ==================================================== | ||||
| |ID|OPERATOR               |NAME    |EST. ROWS|COST| | ||||
| ---------------------------------------------------- | ||||
| |0 |PX COORDINATOR         |        |1        |9   | | ||||
| |1 | EXCHANGE OUT DISTR    |:EX10000|1        |8   | | ||||
| |2 |  PX PARTITION ITERATOR|        |1        |7   | | ||||
| |3 |   TABLE SCAN          |t1      |1        |7   | | ||||
| |0 |PX COORDINATOR         |        |1        |184 | | ||||
| |1 | EXCHANGE OUT DISTR    |:EX10000|1        |184 | | ||||
| |2 |  PX PARTITION ITERATOR|        |1        |183 | | ||||
| |3 |   TABLE SCAN          |t1      |1        |183 | | ||||
| ==================================================== | ||||
|  | ||||
| Outputs & filters:  | ||||
| @ -105,10 +105,10 @@ Query Plan | ||||
| ==================================================== | ||||
| |ID|OPERATOR               |NAME    |EST. ROWS|COST| | ||||
| ---------------------------------------------------- | ||||
| |0 |PX COORDINATOR         |        |1        |9   | | ||||
| |1 | EXCHANGE OUT DISTR    |:EX10000|1        |8   | | ||||
| |2 |  PX PARTITION ITERATOR|        |1        |7   | | ||||
| |3 |   TABLE SCAN          |t1      |1        |7   | | ||||
| |0 |PX COORDINATOR         |        |1        |184 | | ||||
| |1 | EXCHANGE OUT DISTR    |:EX10000|1        |184 | | ||||
| |2 |  PX PARTITION ITERATOR|        |1        |183 | | ||||
| |3 |   TABLE SCAN          |t1      |1        |183 | | ||||
| ==================================================== | ||||
|  | ||||
| Outputs & filters:  | ||||
|  | ||||
| @ -295,21 +295,20 @@ Outputs & filters: | ||||
|  | ||||
| explain basic delete /*+use_px, parallel(10)*/ t_p from t_p,t_p4 where t_p.c1 = t_p4.c1 and t_p.c1 >= 5; | ||||
| Query Plan | ||||
| =============================================== | ||||
| |ID|OPERATOR                         |NAME    | | ||||
| ----------------------------------------------- | ||||
| |0 |DISTRIBUTED DELETE               |        | | ||||
| |1 | PX COORDINATOR                  |        | | ||||
| |2 |  EXCHANGE OUT DISTR             |:EX10001| | ||||
| |3 |   HASH JOIN                     |        | | ||||
| |4 |    PART JOIN FILTER CREATE      |:BF0000 | | ||||
| |5 |     EXCHANGE IN DISTR           |        | | ||||
| |6 |      EXCHANGE OUT DISTR (PKEY)  |:EX10000| | ||||
| |7 |       PX BLOCK ITERATOR         |        | | ||||
| |8 |        TABLE SCAN               |t_p4    | | ||||
| |9 |    PX PARTITION HASH JOIN-FILTER|:BF0000 | | ||||
| |10|     TABLE SCAN                  |t_p     | | ||||
| =============================================== | ||||
| ============================================ | ||||
| |ID|OPERATOR                      |NAME    | | ||||
| -------------------------------------------- | ||||
| |0 |DISTRIBUTED DELETE            |        | | ||||
| |1 | PX COORDINATOR               |        | | ||||
| |2 |  EXCHANGE OUT DISTR          |:EX10001| | ||||
| |3 |   NESTED-LOOP JOIN           |        | | ||||
| |4 |    EXCHANGE IN DISTR         |        | | ||||
| |5 |     EXCHANGE OUT DISTR (PKEY)|:EX10000| | ||||
| |6 |      PX BLOCK ITERATOR       |        | | ||||
| |7 |       TABLE SCAN             |t_p     | | ||||
| |8 |    PX PARTITION ITERATOR     |        | | ||||
| |9 |     TABLE GET                |t_p4    | | ||||
| ============================================ | ||||
|  | ||||
| Outputs & filters:  | ||||
| ------------------------------------- | ||||
| @ -317,16 +316,15 @@ Outputs & filters: | ||||
|   1 - output([t_p.c1], [t_p.c2], [t_p.c3]), filter(nil), rowset=256 | ||||
|   2 - output([t_p.c1], [t_p.c2], [t_p.c3]), filter(nil), rowset=256, dop=4 | ||||
|   3 - output([t_p.c1], [t_p.c2], [t_p.c3]), filter(nil), rowset=256,  | ||||
|       equal_conds([t_p.c1 = t_p4.c1]), other_conds(nil) | ||||
|   4 - output([t_p4.c1]), filter(nil), rowset=256 | ||||
|   5 - output([t_p4.c1]), filter(nil), rowset=256 | ||||
|   6 - (#keys=1, [t_p4.c1]), output([t_p4.c1]), filter(nil), rowset=256, dop=10 | ||||
|   7 - output([t_p4.c1]), filter(nil), rowset=256 | ||||
|   8 - output([t_p4.c1]), filter(nil), rowset=256,  | ||||
|       access([t_p4.c1]), partitions(p[0-3]) | ||||
|   9 - output([t_p.c1], [t_p.c2], [t_p.c3]), filter(nil), rowset=256 | ||||
|   10 - output([t_p.c1], [t_p.c2], [t_p.c3], [PARTITION_ID]), filter(nil), rowset=256,  | ||||
|       conds(nil), nl_params_([t_p.c1]) | ||||
|   4 - output([t_p.c1], [t_p.c2], [t_p.c3], [PARTITION_ID]), filter(nil), rowset=256 | ||||
|   5 - (#keys=1, [t_p.c1]), output([t_p.c1], [t_p.c2], [t_p.c3], [PARTITION_ID]), filter(nil), rowset=256, dop=10 | ||||
|   6 - output([t_p.c1], [t_p.c2], [t_p.c3]), filter(nil), rowset=256 | ||||
|   7 - output([t_p.c1], [t_p.c2], [t_p.c3]), filter(nil), rowset=256, | ||||
|       access([t_p.c1], [t_p.c2], [t_p.c3]), partitions(p[0-3]) | ||||
|   8 - output(nil), filter(nil), rowset=256 | ||||
|   9 - output(nil), filter(nil), rowset=256, | ||||
|       access(nil), partitions(p[0-3]) | ||||
|  | ||||
| delete /*+use_px, parallel(10)*/ t_p from t_p,t_p4 where t_p.c1 = t_p4.c1 and t_p.c1 >= 5; | ||||
| select * from t_p order by c1; | ||||
| @ -344,21 +342,20 @@ insert into t_p(c1,c2) values(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9, | ||||
| call dbms_stats.gather_table_stats('test','t_p'); | ||||
| explain basic delete /*+no_use_px, parallel(10)*/ t_p from t_p,t_p4 where t_p.c1 = t_p4.c2 and t_p.c1 >= 5; | ||||
| Query Plan | ||||
| =============================================== | ||||
| |ID|OPERATOR                         |NAME    | | ||||
| ----------------------------------------------- | ||||
| |0 |DISTRIBUTED DELETE               |        | | ||||
| |1 | PX COORDINATOR                  |        | | ||||
| |2 |  EXCHANGE OUT DISTR             |:EX10001| | ||||
| |3 |   HASH JOIN                     |        | | ||||
| |4 |    PART JOIN FILTER CREATE      |:BF0000 | | ||||
| |5 |     EXCHANGE IN DISTR           |        | | ||||
| |6 |      EXCHANGE OUT DISTR (PKEY)  |:EX10000| | ||||
| |7 |       PX BLOCK ITERATOR         |        | | ||||
| |8 |        TABLE SCAN               |t_p4    | | ||||
| |9 |    PX PARTITION HASH JOIN-FILTER|:BF0000 | | ||||
| |10|     TABLE SCAN                  |t_p     | | ||||
| =============================================== | ||||
| ============================================ | ||||
| |ID|OPERATOR                      |NAME    | | ||||
| -------------------------------------------- | ||||
| |0 |DISTRIBUTED DELETE            |        | | ||||
| |1 | PX COORDINATOR               |        | | ||||
| |2 |  EXCHANGE OUT DISTR          |:EX10001| | ||||
| |3 |   NESTED-LOOP JOIN           |        | | ||||
| |4 |    EXCHANGE IN DISTR         |        | | ||||
| |5 |     EXCHANGE OUT DISTR (PKEY)|:EX10000| | ||||
| |6 |      PX BLOCK ITERATOR       |        | | ||||
| |7 |       TABLE SCAN             |t_p4    | | ||||
| |8 |    PX PARTITION ITERATOR     |        | | ||||
| |9 |     TABLE GET                |t_p     | | ||||
| ============================================ | ||||
|  | ||||
| Outputs & filters:  | ||||
| ------------------------------------- | ||||
| @ -366,34 +363,32 @@ Outputs & filters: | ||||
|   1 - output([t_p.c1], [t_p.c2], [t_p.c3]), filter(nil), rowset=256 | ||||
|   2 - output([t_p.c1], [t_p.c2], [t_p.c3]), filter(nil), rowset=256, dop=4 | ||||
|   3 - output([t_p.c1], [t_p.c2], [t_p.c3]), filter(nil), rowset=256,  | ||||
|       equal_conds([t_p.c1 = t_p4.c2]), other_conds(nil) | ||||
|   4 - output([t_p4.c2]), filter(nil), rowset=256 | ||||
|   5 - output([t_p4.c2]), filter(nil), rowset=256 | ||||
|   6 - (#keys=1, [t_p4.c2]), output([t_p4.c2]), filter(nil), rowset=256, dop=10 | ||||
|   7 - output([t_p4.c2]), filter(nil), rowset=256 | ||||
|   8 - output([t_p4.c2]), filter([t_p4.c2 >= 5]), rowset=256,  | ||||
|       conds(nil), nl_params_([t_p4.c2]) | ||||
|   4 - output([PARTITION_ID], [t_p4.c2]), filter(nil), rowset=256 | ||||
|   5 - (#keys=1, [t_p4.c2]), output([PARTITION_ID], [t_p4.c2]), filter(nil), rowset=256, dop=10 | ||||
|   6 - output([t_p4.c2]), filter(nil), rowset=256 | ||||
|   7 - output([t_p4.c2]), filter([t_p4.c2 >= 5]), rowset=256, | ||||
|       access([t_p4.c2]), partitions(p[0-3]) | ||||
|   9 - output([t_p.c1], [t_p.c2], [t_p.c3]), filter(nil), rowset=256 | ||||
|   10 - output([t_p.c1], [t_p.c2], [t_p.c3], [PARTITION_ID]), filter(nil), rowset=256,  | ||||
|   8 - output([t_p.c1], [t_p.c2], [t_p.c3]), filter(nil), rowset=256 | ||||
|   9 - output([t_p.c1], [t_p.c2], [t_p.c3]), filter(nil), rowset=256, | ||||
|       access([t_p.c1], [t_p.c2], [t_p.c3]), partitions(p[0-3]) | ||||
|  | ||||
| explain basic delete /*+use_px, parallel(10)*/ t_p from t_p,t_p4 where t_p.c1 = t_p4.c2 and t_p.c1 >= 5; | ||||
| Query Plan | ||||
| =============================================== | ||||
| |ID|OPERATOR                         |NAME    | | ||||
| ----------------------------------------------- | ||||
| |0 |DISTRIBUTED DELETE               |        | | ||||
| |1 | PX COORDINATOR                  |        | | ||||
| |2 |  EXCHANGE OUT DISTR             |:EX10001| | ||||
| |3 |   HASH JOIN                     |        | | ||||
| |4 |    PART JOIN FILTER CREATE      |:BF0000 | | ||||
| |5 |     EXCHANGE IN DISTR           |        | | ||||
| |6 |      EXCHANGE OUT DISTR (PKEY)  |:EX10000| | ||||
| |7 |       PX BLOCK ITERATOR         |        | | ||||
| |8 |        TABLE SCAN               |t_p4    | | ||||
| |9 |    PX PARTITION HASH JOIN-FILTER|:BF0000 | | ||||
| |10|     TABLE SCAN                  |t_p     | | ||||
| =============================================== | ||||
| ============================================ | ||||
| |ID|OPERATOR                      |NAME    | | ||||
| -------------------------------------------- | ||||
| |0 |DISTRIBUTED DELETE            |        | | ||||
| |1 | PX COORDINATOR               |        | | ||||
| |2 |  EXCHANGE OUT DISTR          |:EX10001| | ||||
| |3 |   NESTED-LOOP JOIN           |        | | ||||
| |4 |    EXCHANGE IN DISTR         |        | | ||||
| |5 |     EXCHANGE OUT DISTR (PKEY)|:EX10000| | ||||
| |6 |      PX BLOCK ITERATOR       |        | | ||||
| |7 |       TABLE SCAN             |t_p4    | | ||||
| |8 |    PX PARTITION ITERATOR     |        | | ||||
| |9 |     TABLE GET                |t_p     | | ||||
| ============================================ | ||||
|  | ||||
| Outputs & filters:  | ||||
| ------------------------------------- | ||||
| @ -401,15 +396,14 @@ Outputs & filters: | ||||
|   1 - output([t_p.c1], [t_p.c2], [t_p.c3]), filter(nil), rowset=256 | ||||
|   2 - output([t_p.c1], [t_p.c2], [t_p.c3]), filter(nil), rowset=256, dop=4 | ||||
|   3 - output([t_p.c1], [t_p.c2], [t_p.c3]), filter(nil), rowset=256,  | ||||
|       equal_conds([t_p.c1 = t_p4.c2]), other_conds(nil) | ||||
|   4 - output([t_p4.c2]), filter(nil), rowset=256 | ||||
|   5 - output([t_p4.c2]), filter(nil), rowset=256 | ||||
|   6 - (#keys=1, [t_p4.c2]), output([t_p4.c2]), filter(nil), rowset=256, dop=10 | ||||
|   7 - output([t_p4.c2]), filter(nil), rowset=256 | ||||
|   8 - output([t_p4.c2]), filter([t_p4.c2 >= 5]), rowset=256,  | ||||
|       conds(nil), nl_params_([t_p4.c2]) | ||||
|   4 - output([PARTITION_ID], [t_p4.c2]), filter(nil), rowset=256 | ||||
|   5 - (#keys=1, [t_p4.c2]), output([PARTITION_ID], [t_p4.c2]), filter(nil), rowset=256, dop=10 | ||||
|   6 - output([t_p4.c2]), filter(nil), rowset=256 | ||||
|   7 - output([t_p4.c2]), filter([t_p4.c2 >= 5]), rowset=256, | ||||
|       access([t_p4.c2]), partitions(p[0-3]) | ||||
|   9 - output([t_p.c1], [t_p.c2], [t_p.c3]), filter(nil), rowset=256 | ||||
|   10 - output([t_p.c1], [t_p.c2], [t_p.c3], [PARTITION_ID]), filter(nil), rowset=256,  | ||||
|   8 - output([t_p.c1], [t_p.c2], [t_p.c3]), filter(nil), rowset=256 | ||||
|   9 - output([t_p.c1], [t_p.c2], [t_p.c3]), filter(nil), rowset=256, | ||||
|       access([t_p.c1], [t_p.c2], [t_p.c3]), partitions(p[0-3]) | ||||
|  | ||||
| delete /*+use_px, parallel(10)*/ t_p from t_p,t_p4 where t_p.c1 = t_p4.c2 and t_p.c1 >= 5; | ||||
|  | ||||
| @ -73,29 +73,27 @@ Query Plan | ||||
| ======================================================= | ||||
| |ID|OPERATOR                  |NAME    |EST. ROWS|COST| | ||||
| ------------------------------------------------------- | ||||
| |0 |PX COORDINATOR MERGE SORT |        |1        |13  | | ||||
| |1 | EXCHANGE OUT DISTR       |:EX10000|1        |12  | | ||||
| |2 |  SORT                    |        |1        |11  | | ||||
| |3 |   PX PARTITION ITERATOR  |        |1        |11  | | ||||
| |4 |    MERGE JOIN            |        |1        |11  | | ||||
| |5 |     TABLE SCAN           |score   |1        |6   | | ||||
| |6 |     SORT                 |        |1        |6   | | ||||
| |7 |      TABLE SCAN          |stu     |1        |6   | | ||||
| |0 |PX COORDINATOR MERGE SORT |        |1        |143 | | ||||
| |1 | EXCHANGE OUT DISTR       |:EX10000|1        |142 | | ||||
| |2 |  SORT                    |        |1        |141 | | ||||
| |3 |   PX PARTITION ITERATOR  |        |1        |141 | | ||||
| |4 |    NESTED-LOOP JOIN      |        |1        |141 | | ||||
| |5 |     TABLE SCAN           |stu     |1        |137 | | ||||
| |6 |     TABLE SCAN           |score   |1        |19  | | ||||
| ======================================================= | ||||
|  | ||||
| Outputs & filters:  | ||||
| ------------------------------------- | ||||
|   0 - output([INTERNAL_FUNCTION(stu.sid, stu.name, stu.cls, score.sid, score.subject, score.score)]), filter(nil), rowset=256, sort_keys([score.sid, ASC]) | ||||
|   1 - output([score.sid], [INTERNAL_FUNCTION(stu.sid, stu.name, stu.cls, score.sid, score.subject, score.score)]), filter(nil), rowset=256, dop=2 | ||||
|   2 - output([score.sid], [stu.sid], [score.subject], [score.score], [stu.cls], [stu.name]), filter(nil), rowset=256, sort_keys([score.sid, ASC]), local merge sort | ||||
|   3 - output([score.sid], [stu.sid], [score.subject], [score.score], [stu.cls], [stu.name]), filter(nil), rowset=256 | ||||
|   4 - output([score.sid], [stu.sid], [score.subject], [score.score], [stu.cls], [stu.name]), filter(nil), rowset=256,  | ||||
|       equal_conds([stu.sid = score.sid]), other_conds(nil) | ||||
|   5 - output([score.sid], [score.subject], [score.score]), filter(nil), rowset=256,  | ||||
|       access([score.sid], [score.subject], [score.score]), partitions(p[0-5]) | ||||
|   6 - output([stu.sid], [stu.cls], [stu.name]), filter(nil), rowset=256, sort_keys([stu.sid, ASC]) | ||||
|   7 - output([stu.cls], [stu.sid], [stu.name]), filter(nil), rowset=256,  | ||||
|   2 - output([score.sid], [stu.sid], [stu.cls], [stu.name], [score.subject], [score.score]), filter(nil), rowset=256, sort_keys([score.sid, ASC]) | ||||
|   3 - output([score.sid], [stu.sid], [stu.cls], [stu.name], [score.subject], [score.score]), filter(nil), rowset=256 | ||||
|   4 - output([score.sid], [stu.sid], [stu.cls], [stu.name], [score.subject], [score.score]), filter(nil), rowset=256, | ||||
|       conds(nil), nl_params_([stu.sid]) | ||||
|   5 - output([stu.cls], [stu.sid], [stu.name]), filter(nil), rowset=256, | ||||
|       access([stu.cls], [stu.sid], [stu.name]), partitions(p[0-5]) | ||||
|   6 - output([score.sid], [score.subject], [score.score]), filter(nil), rowset=256, | ||||
|       access([GROUP_ID], [score.sid], [score.subject], [score.score]), partitions(p[0-5]) | ||||
|  | ||||
| select /*+ USE_PX parallel(2) */ * from stu, score where stu.sid = score.sid order by score.sid; | ||||
| sid	name	cls	sid	subject	score | ||||
|  | ||||
| @ -73,16 +73,16 @@ Query Plan | ||||
| ================================================================ | ||||
| |ID|OPERATOR                           |NAME    |EST. ROWS|COST| | ||||
| ---------------------------------------------------------------- | ||||
| |0 |PX COORDINATOR                     |        |0        |11  | | ||||
| |1 | EXCHANGE OUT DISTR                |:EX10001|0        |11  | | ||||
| |2 |  NESTED-LOOP JOIN                 |        |0        |11  | | ||||
| |3 |   PX BLOCK ITERATOR               |        |1        |6   | | ||||
| |4 |    TABLE SCAN                     |score   |1        |6   | | ||||
| |5 |   MATERIAL                        |        |1        |6   | | ||||
| |6 |    EXCHANGE IN DISTR              |        |1        |6   | | ||||
| |7 |     EXCHANGE OUT DISTR (BROADCAST)|:EX10000|1        |6   | | ||||
| |8 |      PX BLOCK ITERATOR            |        |1        |6   | | ||||
| |9 |       TABLE SCAN                  |stu     |1        |6   | | ||||
| |0 |PX COORDINATOR                     |        |0        |274 | | ||||
| |1 | EXCHANGE OUT DISTR                |:EX10001|0        |274 | | ||||
| |2 |  NESTED-LOOP JOIN                 |        |0        |274 | | ||||
| |3 |   PX BLOCK ITERATOR               |        |1        |137 | | ||||
| |4 |    TABLE SCAN                     |score   |1        |137 | | ||||
| |5 |   MATERIAL                        |        |1        |137 | | ||||
| |6 |    EXCHANGE IN DISTR              |        |1        |137 | | ||||
| |7 |     EXCHANGE OUT DISTR (BROADCAST)|:EX10000|1        |137 | | ||||
| |8 |      PX BLOCK ITERATOR            |        |1        |137 | | ||||
| |9 |       TABLE SCAN                  |stu     |1        |137 | | ||||
| ================================================================ | ||||
|  | ||||
| Outputs & filters:  | ||||
| @ -134,15 +134,15 @@ Query Plan | ||||
| ============================================================= | ||||
| |ID|OPERATOR                        |NAME    |EST. ROWS|COST| | ||||
| ------------------------------------------------------------- | ||||
| |0 |PX COORDINATOR                  |        |1        |10  | | ||||
| |1 | EXCHANGE OUT DISTR             |:EX10001|1        |9   | | ||||
| |2 |  SHARED HASH JOIN              |        |1        |8   | | ||||
| |3 |   EXCHANGE IN DISTR            |        |1        |6   | | ||||
| |4 |    EXCHANGE OUT DISTR (BC2HOST)|:EX10000|1        |6   | | ||||
| |5 |     PX BLOCK ITERATOR          |        |1        |6   | | ||||
| |6 |      TABLE SCAN                |score   |1        |6   | | ||||
| |7 |   PX BLOCK ITERATOR            |        |1        |2   | | ||||
| |8 |    TABLE GET                   |teacher |1        |2   | | ||||
| |0 |PX COORDINATOR                  |        |1        |163 | | ||||
| |1 | EXCHANGE OUT DISTR             |:EX10001|1        |162 | | ||||
| |2 |  SHARED HASH JOIN              |        |1        |161 | | ||||
| |3 |   EXCHANGE IN DISTR            |        |1        |138 | | ||||
| |4 |    EXCHANGE OUT DISTR (BC2HOST)|:EX10000|1        |137 | | ||||
| |5 |     PX BLOCK ITERATOR          |        |1        |137 | | ||||
| |6 |      TABLE SCAN                |score   |1        |137 | | ||||
| |7 |   PX BLOCK ITERATOR            |        |1        |23  | | ||||
| |8 |    TABLE GET                   |teacher |1        |23  | | ||||
| ============================================================= | ||||
|  | ||||
| Outputs & filters:  | ||||
|  | ||||
| @ -73,27 +73,25 @@ Query Plan | ||||
| ==================================================== | ||||
| |ID|OPERATOR               |NAME    |EST. ROWS|COST| | ||||
| ---------------------------------------------------- | ||||
| |0 |PX COORDINATOR         |        |1        |13  | | ||||
| |1 | EXCHANGE OUT DISTR    |:EX10000|1        |12  | | ||||
| |2 |  PX PARTITION ITERATOR|        |1        |11  | | ||||
| |3 |   MERGE JOIN          |        |1        |11  | | ||||
| |4 |    TABLE SCAN         |score   |1        |6   | | ||||
| |5 |    SORT               |        |1        |6   | | ||||
| |6 |     TABLE SCAN        |stu     |1        |6   | | ||||
| |0 |PX COORDINATOR         |        |1        |143 | | ||||
| |1 | EXCHANGE OUT DISTR    |:EX10000|1        |142 | | ||||
| |2 |  PX PARTITION ITERATOR|        |1        |141 | | ||||
| |3 |   NESTED-LOOP JOIN    |        |1        |141 | | ||||
| |4 |    TABLE SCAN         |stu     |1        |137 | | ||||
| |5 |    TABLE SCAN         |score   |1        |19  | | ||||
| ==================================================== | ||||
|  | ||||
| Outputs & filters:  | ||||
| ------------------------------------- | ||||
|   0 - output([INTERNAL_FUNCTION(stu.sid, stu.name, stu.cls, score.sid, score.subject, score.score)]), filter(nil), rowset=256 | ||||
|   1 - output([INTERNAL_FUNCTION(stu.sid, stu.name, stu.cls, score.sid, score.subject, score.score)]), filter(nil), rowset=256, dop=2 | ||||
|   2 - output([stu.sid], [score.sid], [score.subject], [score.score], [stu.cls], [stu.name]), filter(nil), rowset=256 | ||||
|   3 - output([stu.sid], [score.sid], [score.subject], [score.score], [stu.cls], [stu.name]), filter(nil), rowset=256,  | ||||
|       equal_conds([stu.sid = score.sid]), other_conds(nil) | ||||
|   4 - output([score.sid], [score.subject], [score.score]), filter(nil), rowset=256,  | ||||
|       access([score.sid], [score.subject], [score.score]), partitions(p[0-5]) | ||||
|   5 - output([stu.sid], [stu.cls], [stu.name]), filter(nil), rowset=256, sort_keys([stu.sid, ASC]) | ||||
|   6 - output([stu.cls], [stu.sid], [stu.name]), filter(nil), rowset=256,  | ||||
|   2 - output([stu.sid], [stu.cls], [stu.name], [score.sid], [score.subject], [score.score]), filter(nil), rowset=256 | ||||
|   3 - output([stu.sid], [stu.cls], [stu.name], [score.sid], [score.subject], [score.score]), filter(nil), rowset=256, | ||||
|       conds(nil), nl_params_([stu.sid]) | ||||
|   4 - output([stu.cls], [stu.sid], [stu.name]), filter(nil), rowset=256, | ||||
|       access([stu.cls], [stu.sid], [stu.name]), partitions(p[0-5]) | ||||
|   5 - output([score.sid], [score.subject], [score.score]), filter(nil), rowset=256, | ||||
|       access([GROUP_ID], [score.sid], [score.subject], [score.score]), partitions(p[0-5]) | ||||
|  | ||||
| select /*+ USE_PX parallel(2) */ * from stu, score where stu.sid = score.sid; | ||||
| sid	name	cls	sid	subject	score | ||||
|  | ||||
| @ -117,7 +117,7 @@ select query_sql, EXPECTED_WORKER_COUNT, USED_WORKER_COUNT from oceanbase.GV$OB_ | ||||
| | select /*+ TEST_SQL_AUDIT USE_PX parallel(2) */ subject, avg(score), max(score), min(score) from score group by subject                                |                     4 |                 4 | | ||||
| | select /*+ TEST_SQL_AUDIT USE_PX parallel(3) */ * from teacher                                                                                         |                     3 |                 3 | | ||||
| | select /*+ TEST_SQL_AUDIT USE_PX parallel(3) */ cls, subject, avg(score), max(score), min(score) from score join stu using (sid) group by cls, subject |                     6 |                 6 | | ||||
| | select /*+ TEST_SQL_AUDIT USE_PX parallel(3) */ count(*) from score join stu using (sid) inner join teacher where score.subject = teacher.subject      |                     9 |                 9 | | ||||
| | select /*+ TEST_SQL_AUDIT USE_PX parallel(3) */ count(*) from score join stu using (sid) inner join teacher where score.subject = teacher.subject      |                     6 |                 6 | | ||||
| | select /*+ TEST_SQL_AUDIT USE_PX parallel(3) */ subject, avg(score), max(score), min(score) from score group by subject                                |                     6 |                 6 | | ||||
| | select /*+ TEST_SQL_AUDIT USE_PX parallel(4) */ * from teacher                                                                                         |                     4 |                 4 | | ||||
| +--------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+-------------------+ | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 obdev
					obdev