复杂的Oracle分组复合CUBE查询

时间:2015-07-06 18:36:29

标签: oracle grouping cube

我需要使用CUBE分组功能以获得所有可能的组合,以便可以在APEX上使用此报告,其中参数控制报告的查看方式。我的完整查询太复杂,无法显示,可能只是混淆了这种情况。这里我有缩减版

Select  /*+ NO_PARALLEL */ ETP_ETPC_UID,
        Decode (Grouping(ETP_ET_UID),       1, '-Grouped-', ETP_ET_UID),
        /* Decode (Grouping(ETP_ET_UID),       1, '-Grouped-', ET_ABBR), */
        Decode (Grouping(ETP_REFERENCE_1),  1, '-Grouped-', ETP_REFERENCE_1),
        Decode (Grouping(ETP_REFERENCE_2),  1, '-Grouped-', ETP_REFERENCE_2),
        Sum(ETP_COUNT)
From    ETP_PROFILE,
        ET_EVENT_TYPE
Where   ETP_ET_UID               = ET_UID
Group By 
        ETP_ETPC_UID,
        Cube( /*(*/ETP_ET_UID/*, ET_ABBR)*/ , ETP_REFERENCE_1, ETP_REFERENCE_2)

我目前遇到的问题与我评论过的部分有关。根据{{​​3}},复合列意味着被视为1,非常好,我可以在我的查询中使用ET_ABBR并将ET_UID和ET_ABBR设置为复合(取消注释我的代码,您将看到)。

当我这样做时,它似乎荒谬地增加了查询的成本(根据解释计划),实际上它需要永远运行。如果我删除了我的ET_ABBR列(现在代码是如何使用注释的),它加载速度非常快,解释计划成本很高。

我在这里做错了,我应该使用分组集还是类似的东西?这是我第一次搞乱这些特殊的分组命令,它们看起来很好,但很混乱。

编辑: 解释评论查询的计划:

Plan hash value: 3169115854

------------------------------------------------------------------------------------------------------
| Id  | Operation              | Name        | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT       |             |   142K|     9M|   408   (3)| 00:00:05 |       |       |
|   1 |  SORT GROUP BY         |             |   142K|     9M|   408   (3)| 00:00:05 |       |       |
|   2 |   GENERATE CUBE        |             |   142K|     9M|   408   (3)| 00:00:05 |       |       |
|   3 |    SORT GROUP BY       |             |   142K|     9M|   408   (3)| 00:00:05 |       |       |
|   4 |     PARTITION RANGE ALL|             |   142K|     9M|   401   (1)| 00:00:05 |     1 |1048575|
|   5 |      PARTITION LIST ALL|             |   142K|     9M|   401   (1)| 00:00:05 |     1 |    10 |
|   6 |       TABLE ACCESS FULL| ETP_PROFILE |   142K|     9M|   401   (1)| 00:00:05 |     1 |1048575|
------------------------------------------------------------------------------------------------------

Note
-----
   - dynamic sampling used for this statement (level=2)

解释未评论代码的计划:

Plan hash value: 2063641247

--------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                  | Name                        | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
--------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT           |                             |    54 |  6426 |   427   (4)| 00:00:06 |       |       |
|   1 |  TEMP TABLE TRANSFORMATION |                             |       |       |            |          |       |       |
|   2 |   MULTI-TABLE INSERT       |                             |       |       |            |          |       |       |
|   3 |    SORT GROUP BY ROLLUP    |                             |    54 |  4536 |   412   (3)| 00:00:05 |       |       |
|*  4 |     HASH JOIN              |                             |   142K|    11M|   406   (1)| 00:00:05 |       |       |
|   5 |      TABLE ACCESS FULL     | ET_EVENT_TYPE               |    55 |   605 |     4   (0)| 00:00:01 |       |       |
|   6 |      PARTITION RANGE ALL   |                             |   142K|     9M|   401   (1)| 00:00:05 |     1 |1048575|
|   7 |       PARTITION LIST ALL   |                             |   142K|     9M|   401   (1)| 00:00:05 |     1 |    10 |
|   8 |        TABLE ACCESS FULL   | ETP_PROFILE                 |   142K|     9M|   401   (1)| 00:00:05 |     1 |1048575|
|   9 |    DIRECT LOAD INTO        | SYS_TEMP_0FD9D6E6F_E9BC1839 |       |       |            |          |       |       |
|  10 |    DIRECT LOAD INTO        | SYS_TEMP_0FD9D6E70_E9BC1839 |       |       |            |          |       |       |
|  11 |   LOAD AS SELECT           | SYS_TEMP_0FD9D6E70_E9BC1839 |       |       |            |          |       |       |
|  12 |    SORT GROUP BY ROLLUP    |                             |    54 |  3402 |     3  (34)| 00:00:01 |       |       |
|  13 |     TABLE ACCESS FULL      | SYS_TEMP_0FD9D6E6F_E9BC1839 |    54 |  3402 |     2   (0)| 00:00:01 |       |       |
|  14 |   MULTI-TABLE INSERT       |                             |       |       |            |          |       |       |
|  15 |    SORT GROUP BY ROLLUP    |                             |    54 |  3240 |     3  (34)| 00:00:01 |       |       |
|  16 |     TABLE ACCESS FULL      | SYS_TEMP_0FD9D6E6F_E9BC1839 |    54 |  3240 |     2   (0)| 00:00:01 |       |       |
|  17 |    DIRECT LOAD INTO        | SYS_TEMP_0FD9D6E71_E9BC1839 |       |       |            |          |       |       |
|  18 |    DIRECT LOAD INTO        | SYS_TEMP_0FD9D6E70_E9BC1839 |       |       |            |          |       |       |
|  19 |   LOAD AS SELECT           | SYS_TEMP_0FD9D6E70_E9BC1839 |       |       |            |          |       |       |
|  20 |    SORT GROUP BY ROLLUP    |                             |    54 |  2322 |     3  (34)| 00:00:01 |       |       |
|  21 |     TABLE ACCESS FULL      | SYS_TEMP_0FD9D6E71_E9BC1839 |    54 |  2322 |     2   (0)| 00:00:01 |       |       |
|  22 |   VIEW                     |                             |   162 | 19278 |     6   (0)| 00:00:01 |       |       |
|  23 |    VIEW                    |                             |   162 | 15066 |     6   (0)| 00:00:01 |       |       |
|  24 |     UNION-ALL              |                             |       |       |            |          |       |       |
|  25 |      TABLE ACCESS FULL     | SYS_TEMP_0FD9D6E6F_E9BC1839 |    54 |  4536 |     2   (0)| 00:00:01 |       |       |
|  26 |      TABLE ACCESS FULL     | SYS_TEMP_0FD9D6E70_E9BC1839 |    54 |  4536 |     2   (0)| 00:00:01 |       |       |
|  27 |      TABLE ACCESS FULL     | SYS_TEMP_0FD9D6E71_E9BC1839 |    54 |  3240 |     2   (0)| 00:00:01 |       |       |
--------------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   4 - access("SYS_TBL_$2$"."ETP_ET_UID"="SYS_TBL_$1$"."ET_UID")

Note
-----
   - dynamic sampling used for this statement (level=2)

0 个答案:

没有答案