Oracle rownum影响执行计划

标签: oracle rownum 计划 | 发表时间:2014-08-21 03:42 | 作者:guogang83
出处:http://blog.csdn.net

   今天调优一条SQL语句,由于SQL比较复杂,用autotrace很难一眼看出哪里出了问题,直接上10046。

SELECT AB.*
FROM (SELECT A.*, rownum RN
FROM (SELECT *
        from (SELECT DISTINCT (D.DEVICE_ID), F.FUNCTION_LOCATION_ID
                from GG_device D,
                     GG_CLASSIFY_CARD C,
                     GG_function_location F,
                     GG_fl_device L,
                     GG_tech_object_node n,
                     (SELECT N.TECH_OBJECT_ID
                        FROM GG_TECH_OBJECT_NODE N
                       WHERE N.NODE_TYPE = 2
                       START WITH N.TECH_OBJECT_ID = 15773325
                      CONNECT BY PRIOR
                                  N.TECH_OBJECT_NODE_ID = N.PARENT_ID) TAB
               where F.FUNCTION_LOCATION_ID = L.FUNCTION_LOCATION_ID
                 and L.Device_Id = d.device_id
                 and d.classify_id = c.classify_id
                 AND EXISTS
               (SELECT 1
                        FROM GG_TECH_OBJECT_NODE N
                       WHERE N.TECH_OBJECT_ID = D.DEVICE_ID
                         AND N.NODE_TYPE = 2)
                 AND D.CURRENT_STATUS = 0
                 AND D.IS_SHARE_DEVICE = 1
                 AND TAB.TECH_OBJECT_ID = D.DEVICE_ID
                 and n.tech_object_id = f.function_location_id
                 AND F.SITE_ID = 1021
                 AND C.ALIAS_NAME IN ('A176')
              union all
              SELECT DISTINCT (D.DEVICE_ID), F.FUNCTION_LOCATION_ID
                FROM GG_DEVICE D,
                     GG_CLASSIFY_CARD C,
                     GG_FUNCTION_LOCATION F,
                     GG_tech_object_node n,
                     (SELECT N.TECH_OBJECT_ID
                        FROM GG_TECH_OBJECT_NODE N
                       WHERE N.NODE_TYPE = 2
                       START WITH N.TECH_OBJECT_ID = 15773325
                      CONNECT BY PRIOR
                                  N.TECH_OBJECT_NODE_ID = N.PARENT_ID) TAB
               WHERE D.CLASSIFY_ID = C.CLASSIFY_ID
                 AND F.FUNCTION_LOCATION_ID(+) =
                     D.FUNCTION_LOCATION_ID
                 and n.tech_object_id = f.function_location_id
                 AND EXISTS
               (SELECT 1
                        FROM GG_TECH_OBJECT_NODE N
                       WHERE N.TECH_OBJECT_ID = D.DEVICE_ID
                         AND N.NODE_TYPE = 2)
                 AND D.CURRENT_STATUS = 0
                 AND D.IS_SHARE_DEVICE = 0
                 AND TAB.TECH_OBJECT_ID = D.DEVICE_ID
                 AND F.SITE_ID = 1021
                 AND C.ALIAS_NAME IN ('A176'))) A
WHERE ROWNUM <= 25) AB

WHERE AB.RN > 0;

已用时间:  00: 00: 05.56

----------------------------------------------------------
Plan hash value: 1124467031
---------------------------------------------------------------------------------------------------------------------
| Id  | Operation                               | Name                      | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                        |                           |    18 | 67248 | 28951   (1)| 00:05:48 |
|*  1 |  VIEW                                   |                           |    18 | 67248 | 28951   (1)| 00:05:48 |
|*  2 |   COUNT STOPKEY                         |                           |       |       |         |     |
|   3 |    VIEW                                 |                           |    18 | 67014 | 28951   (1)| 00:05:48 |
|*  4 |     SORT ORDER BY STOPKEY               |                           |    18 | 67014 | 28951   (1)| 00:05:48 |
|   5 |      VIEW                               |                           |    18 | 67014 | 28950   (1)| 00:05:48 |
|   6 |       UNION-ALL                         |                           |       |       |         |     |
|   7 |        HASH UNIQUE                      |                           |     6 |  2064 | 15146   (1)| 00:03:02 |
|*  8 |         HASH JOIN                       |                           |     6 |  2064 | 15145   (1)| 00:03:02 |
|   9 |          TABLE ACCESS BY INDEX ROWID    | GG_TECH_OBJECT_NODE     |     1 |   102 |     3   (0)| 00:00:01 |
|  10 |           NESTED LOOPS                  |                           |     6 |  2022 |  5842   (1)| 00:01:11 |
|  11 |            NESTED LOOPS SEMI            |                           |     5 |  1175 |  5827   (1)| 00:01:10 |
|  12 |             NESTED LOOPS                |                           |     5 |  1125 |  5817   (1)| 00:01:10 |
|* 13 |              HASH JOIN                  |                           |   172 | 32508 |  5645   (1)| 00:01:08 |
|* 14 |               HASH JOIN                 |                           |    77 | 13629 |  5601   (1)| 00:01:08 |
|* 15 |                TABLE ACCESS FULL        | GG_CLASSIFY_CARD         |     1 |    93 |    16   (0)| 00:00:01 |
|* 16 |                TABLE ACCESS FULL        | GG_DEVICE               | 22527 |  1847K|  5584   (1)| 00:01:08 |
|  17 |               TABLE ACCESS FULL         | GG_FL_DEVICE            | 74829 |   876K|    43   (3)| 00:00:01 |
|* 18 |              TABLE ACCESS BY INDEX ROWID| GG_FUNCTION_LOCATION    |     1 |    36 |     1   (0)| 00:00:01 |
|* 19 |               INDEX UNIQUE SCAN         | PK_GG_FUNCTION_LOCATION |     1 |       |     0   (0)| 00:00:01 |
|* 20 |             INDEX RANGE SCAN            | IDX_TECH_NODE_ID          |   482K|  4712K|     2   (0)| 00:00:01 |
|* 21 |            INDEX RANGE SCAN             | IDX_TECH_OBJECT_ID        |     1 |       |     2   (0)| 00:00:01 |
|  22 |          VIEW                           |                           |  1762K|    11M|  9291   (1)| 00:01:52 |
|* 23 |           FILTER                        |                           |       |       |         |     |
|* 24 |            CONNECT BY WITH FILTERING    |                           |       |       |         |     |
|  25 |             TABLE ACCESS BY INDEX ROWID | GG_TECH_OBJECT_NODE     |       |       |         |     |
|* 26 |              INDEX RANGE SCAN           | IDX_TECH_OBJECT_ID        |     1 |     7 |     3   (0)| 00:00:01 |
|* 27 |             HASH JOIN                   |                           |       |       |         |     |
|  28 |              CONNECT BY PUMP            |                           |       |       |         |     |
|  29 |              TABLE ACCESS FULL          | GG_TECH_OBJECT_NODE     |  1762K|    40M|  9291   (1)| 00:01:52 |
|  30 |             TABLE ACCESS FULL           | GG_TECH_OBJECT_NODE     |  1762K|    40M|  9291   (1)| 00:01:52 |
|  31 |        HASH UNIQUE                      |                           |    12 |  4056 | 13804   (1)| 00:02:46 |
|* 32 |         HASH JOIN                       |                           |    12 |  4056 | 13803   (1)| 00:02:46 |
|  33 |          TABLE ACCESS BY INDEX ROWID    | GG_TECH_OBJECT_NODE     |     1 |   102 |     3   (0)| 00:00:01 |
|  34 |           NESTED LOOPS                  |                           |    11 |  3641 |  4501   (1)| 00:00:55 |
|  35 |            NESTED LOOPS SEMI            |                           |    10 |  2290 |  4471   (1)| 00:00:54 |
|* 36 |             HASH JOIN                   |                           |    10 |  2190 |  4451   (1)| 00:00:54 |
|* 37 |              TABLE ACCESS FULL          | GG_CLASSIFY_CARD         |     1 |    93 |    16   (0)| 00:00:01 |
|* 38 |              TABLE ACCESS BY INDEX ROWID| GG_DEVICE               |     4 |   360 |     5   (0)| 00:00:01 |
|  39 |               NESTED LOOPS              |                           |  2823 |   347K|  4434   (1)| 00:00:54 |
|* 40 |                TABLE ACCESS FULL        | GG_FUNCTION_LOCATION    |   685 | 24660 |  2214   (1)| 00:00:27 |
|* 41 |                INDEX RANGE SCAN         | IDX_FLOCID                |     4 |       |     2   (0)| 00:00:01 |
|* 42 |             INDEX RANGE SCAN            | IDX_TECH_NODE_ID          |   482K|  4712K|     2   (0)| 00:00:01 |
|* 43 |            INDEX RANGE SCAN             | IDX_TECH_OBJECT_ID        |     1 |       |     2   (0)| 00:00:01 |
|  44 |          VIEW                           |                           |  1762K|    11M|  9291   (1)| 00:01:52 |
|* 45 |           FILTER                        |                           |       |       |         |     |
|* 46 |            CONNECT BY WITH FILTERING    |                           |       |       |         |     |
|  47 |             TABLE ACCESS BY INDEX ROWID | GG_TECH_OBJECT_NODE     |       |       |         |     |
|* 48 |              INDEX RANGE SCAN           | IDX_TECH_OBJECT_ID        |     1 |     7 |     3   (0)| 00:00:01 |
|* 49 |             HASH JOIN                   |                           |       |       |         |     |
|  50 |              CONNECT BY PUMP            |                           |       |       |         |     |
|  51 |              TABLE ACCESS FULL          | GG_TECH_OBJECT_NODE     |  1762K|    40M|  9291   (1)| 00:01:52 |
|  52 |             TABLE ACCESS FULL           | GG_TECH_OBJECT_NODE     |  1762K|    40M|  9291   (1)| 00:01:52 |
---------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter("AB"."RN">0)
   2 - filter(ROWNUM<=25)
   4 - filter(ROWNUM<=25)
   8 - access("TAB"."TECH_OBJECT_ID"="D"."DEVICE_ID")
  13 - access("L"."DEVICE_ID"="D"."DEVICE_ID")
  14 - access("D"."CLASSIFY_ID"="C"."CLASSIFY_ID")
  15 - filter("C"."ALIAS_NAME"='A176')
  16 - filter("D"."IS_SHARE_DEVICE"=1 AND "D"."CURRENT_STATUS"=0)
  18 - filter("F"."SITE_ID"=1021)
  19 - access("F"."FUNCTION_LOCATION_ID"="L"."FUNCTION_LOCATION_ID")
  20 - access("N"."TECH_OBJECT_ID"="D"."DEVICE_ID" AND "N"."NODE_TYPE"=2)
  21 - access("N"."TECH_OBJECT_ID"="F"."FUNCTION_LOCATION_ID")
  23 - filter("N"."NODE_TYPE"=2)
  24 - filter("N"."TECH_OBJECT_ID"=15773325)
  26 - access("N"."TECH_OBJECT_ID"=15773325)
  27 - access("N"."PARENT_ID"=NULL)
  32 - access("TAB"."TECH_OBJECT_ID"="D"."DEVICE_ID")
  36 - access("D"."CLASSIFY_ID"="C"."CLASSIFY_ID")
  37 - filter("C"."ALIAS_NAME"='A176')
  38 - filter("D"."IS_SHARE_DEVICE"=0 AND "D"."CURRENT_STATUS"=0)
  40 - filter("F"."SITE_ID"=1021)
  41 - access("F"."FUNCTION_LOCATION_ID"="D"."FUNCTION_LOCATION_ID")
  42 - access("N"."TECH_OBJECT_ID"="D"."DEVICE_ID" AND "N"."NODE_TYPE"=2)
  43 - access("N"."TECH_OBJECT_ID"="F"."FUNCTION_LOCATION_ID")
  45 - filter("N"."NODE_TYPE"=2)
  46 - filter("N"."TECH_OBJECT_ID"=15773325)
  48 - access("N"."TECH_OBJECT_ID"=15773325)
  49 - access("N"."PARENT_ID"=NULL)
统计信息
----------------------------------------------------------
          9  recursive calls
          0  db block gets
     209163  consistent gets
          0  physical reads
          0  redo size
       2890  bytes sent via SQL*Net to client
      10811  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
         63  sorts (memory)
          0  sorts (disk)
          1  rows processed

10046 trace的结果,可以一眼看出是递归出了问题,按照业务上来说一个节点下面没有多少数据啊,怎么会不走索引呢?

Rows     Row Source Operation
-------  ---------------------------------------------------
      1  VIEW  (cr=209038 pr=0 pw=0 time=5665797 us)
      1   COUNT STOPKEY (cr=209038 pr=0 pw=0 time=5665774 us)
      1    VIEW  (cr=209038 pr=0 pw=0 time=5665768 us)
      1     SORT ORDER BY STOPKEY (cr=209038 pr=0 pw=0 time=5665745 us)
      1      VIEW  (cr=209038 pr=0 pw=0 time=5665649 us)
      1       UNION-ALL  (cr=209038 pr=0 pw=0 time=5665631 us)
      0        HASH UNIQUE (cr=25205 pr=0 pw=0 time=570538 us)
      0         HASH JOIN  (cr=25205 pr=0 pw=0 time=570360 us)
      0          TABLE ACCESS BY INDEX ROWID GG_TECH_OBJECT_NODE (cr=25205 pr=0 pw=0 time=570095 us)
      1           NESTED LOOPS  (cr=25205 pr=0 pw=0 time=570075 us)
      0            NESTED LOOPS SEMI (cr=25205 pr=0 pw=0 time=570069 us)
      0             NESTED LOOPS  (cr=25205 pr=0 pw=0 time=570066 us)
      0              HASH JOIN  (cr=25205 pr=0 pw=0 time=570062 us)
      0               HASH JOIN  (cr=25205 pr=0 pw=0 time=569617 us)
      1                TABLE ACCESS FULL GG_CLASSIFY_CARD (cr=68 pr=0 pw=0 time=1467 us)
  21206                TABLE ACCESS FULL GG_DEVICE (cr=25137 pr=0 pw=0 time=424214 us)
      0               TABLE ACCESS FULL GG_FL_DEVICE (cr=0 pr=0 pw=0 time=0 us)
      0              TABLE ACCESS BY INDEX ROWID GG_FUNCTION_LOCATION (cr=0 pr=0 pw=0 time=0 us)
      0               INDEX UNIQUE SCAN PK_GG_FUNCTION_LOCATION (cr=0 pr=0 pw=0 time=0 us)(object id 508068)
      0             INDEX RANGE SCAN IDX_TECH_NODE_ID (cr=0 pr=0 pw=0 time=0 us)(object id 541613)
      0            INDEX RANGE SCAN IDX_TECH_OBJECT_ID (cr=0 pr=0 pw=0 time=0 us)(object id 508645)
      0          VIEW  (cr=0 pr=0 pw=0 time=0 us)
      0           FILTER  (cr=0 pr=0 pw=0 time=0 us)
      0            CONNECT BY WITH FILTERING (cr=0 pr=0 pw=0 time=0 us)
      0             TABLE ACCESS BY INDEX ROWID GG_TECH_OBJECT_NODE (cr=0 pr=0 pw=0 time=0 us)
      0              INDEX RANGE SCAN IDX_TECH_OBJECT_ID (cr=0 pr=0 pw=0 time=0 us)(object id 508645)
      0             HASH JOIN  (cr=0 pr=0 pw=0 time=0 us)
      0              CONNECT BY PUMP  (cr=0 pr=0 pw=0 time=0 us)
      0              TABLE ACCESS FULL GG_TECH_OBJECT_NODE (cr=0 pr=0 pw=0 time=0 us)
      0             TABLE ACCESS FULL GG_TECH_OBJECT_NODE (cr=0 pr=0 pw=0 time=0 us)
      1        HASH UNIQUE (cr=183833 pr=0 pw=0 time=5095035 us)
      1         HASH JOIN  (cr=183748 pr=0 pw=0 time=5090111 us)
    170          TABLE ACCESS BY INDEX ROWID GG_TECH_OBJECT_NODE (cr=15772 pr=0 pw=0 time=7653 us)
    341           NESTED LOOPS  (cr=15610 pr=0 pw=0 time=189743 us)
    170            NESTED LOOPS SEMI (cr=15268 pr=0 pw=0 time=5170 us)
    170             HASH JOIN  (cr=14926 pr=0 pw=0 time=3232 us)
      1              TABLE ACCESS FULL GG_CLASSIFY_CARD (cr=68 pr=0 pw=0 time=830 us)
   2867              TABLE ACCESS BY INDEX ROWID GG_DEVICE (cr=14858 pr=0 pw=0 time=28976 us)
   4728               NESTED LOOPS  (cr=13282 pr=0 pw=0 time=94565 us)
   1667                TABLE ACCESS FULL GG_FUNCTION_LOCATION (cr=9937 pr=0 pw=0 time=13539 us)
   3060                INDEX RANGE SCAN IDX_FLOCID (cr=3345 pr=0 pw=0 time=12458 us)(object id 507929)
    170             INDEX RANGE SCAN IDX_TECH_NODE_ID (cr=342 pr=0 pw=0 time=3171 us)(object id 541613)
    170            INDEX RANGE SCAN IDX_TECH_OBJECT_ID (cr=342 pr=0 pw=0 time=1854 us)(object id 508645)
     31          VIEW  (cr=167976 pr=0 pw=0 time=4864861 us)
     31           FILTER  (cr=167976 pr=0 pw=0 time=4864794 us)
     56            CONNECT BY WITH FILTERING (cr=167976 pr=0 pw=0 time=4865653 us)
      1             TABLE ACCESS BY INDEX ROWID GG_TECH_OBJECT_NODE (cr=4 pr=0 pw=0 time=58 us)
      1              INDEX RANGE SCAN IDX_TECH_OBJECT_ID (cr=3 pr=0 pw=0 time=25 us)(object id 508645)
     55             HASH JOIN  (cr=167972 pr=0 pw=0 time=1264029 us)
     56              CONNECT BY PUMP  (cr=0 pr=0 pw=0 time=56 us)
7048956              TABLE ACCESS FULL GG_TECH_OBJECT_NODE (cr=167972 pr=0 pw=0 time=488 us)
      0             TABLE ACCESS FULL GG_TECH_OBJECT_NODE (cr=0 pr=0 pw=0 time=0 us)          

  

    在无意中测试发现,去掉分页的语句之后,就非常快了,揣测是COUNT STOPKEY造成的,如果数据量大的做分页,肯定是可以提升性能的,但此条SQL语句只是返回一条数据。我的结论是rownum可以改变执行计划。       

SQL> SELECT *
from (SELECT DISTINCT (D.DEVICE_ID), F.FUNCTION_LOCATION_ID
      from GG_device D,
           GG_CLASSIFY_CARD C,
           GG_function_location F,
           GG_fl_device L,
           GG_tech_object_node n,
           (SELECT N.TECH_OBJECT_ID
              FROM GG_TECH_OBJECT_NODE N
             WHERE N.NODE_TYPE = 2
             START WITH N.TECH_OBJECT_ID = 15773325
            CONNECT BY PRIOR N.TECH_OBJECT_NODE_ID = N.PARENT_ID) TAB
     where F.FUNCTION_LOCATION_ID = L.FUNCTION_LOCATION_ID
       and L.Device_Id = d.device_id
       and d.classify_id = c.classify_id
       AND EXISTS (SELECT 1
              FROM GG_TECH_OBJECT_NODE N
             WHERE N.TECH_OBJECT_ID = D.DEVICE_ID
               AND N.NODE_TYPE = 2)
       AND D.CURRENT_STATUS = 0
       AND D.IS_SHARE_DEVICE = 1
       AND TAB.TECH_OBJECT_ID = D.DEVICE_ID
       and n.tech_object_id = f.function_location_id
       AND F.SITE_ID = 1021
       AND C.ALIAS_NAME IN ('A176')
    union all
    SELECT DISTINCT (D.DEVICE_ID), F.FUNCTION_LOCATION_ID
      FROM GG_DEVICE D,
           GG_CLASSIFY_CARD C,
           GG_FUNCTION_LOCATION F,
           GG_tech_object_node n,
           (SELECT N.TECH_OBJECT_ID
              FROM GG_TECH_OBJECT_NODE N
             WHERE N.NODE_TYPE = 2
             START WITH N.TECH_OBJECT_ID = 15773325
            CONNECT BY PRIOR N.TECH_OBJECT_NODE_ID = N.PARENT_ID) TAB
     WHERE D.CLASSIFY_ID = C.CLASSIFY_ID
       AND F.FUNCTION_LOCATION_ID(+) = D.FUNCTION_LOCATION_ID
       and n.tech_object_id = f.function_location_id
       AND EXISTS (SELECT 1
              FROM GG_TECH_OBJECT_NODE N
             WHERE N.TECH_OBJECT_ID = D.DEVICE_ID
               AND N.NODE_TYPE = 2)
       AND D.CURRENT_STATUS = 0
       AND D.IS_SHARE_DEVICE = 0
       AND TAB.TECH_OBJECT_ID = D.DEVICE_ID
       AND F.SITE_ID = 1021
       AND C.ALIAS_NAME IN ('A176'));
已用时间:  00: 00: 00.06
执行计划
----------------------------------------------------------
Plan hash value: 1345020195
------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                 | Name                       | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                          |                            |     2 |  7446 |    41   (5)| 00:00:01 |
|   1 |  VIEW                                     |                            |     2 |  7446 |    41   (5)| 00:00:01 |
|   2 |   UNION-ALL                               |                            |       |       |         |             |
|   3 |    HASH UNIQUE                            |                            |     1 |   345 |    21   (5)| 00:00:01 |
|   4 |     TABLE ACCESS BY INDEX ROWID           | GG_TECH_OBJECT_NODE      |     1 |   103 |     3   (0)| 00:00:01 |
|   5 |      NESTED LOOPS                         |                            |     1 |   345 |    20   (0)| 00:00:01 |
|   6 |       NESTED LOOPS                        |                            |     1 |   242 |    17   (0)| 00:00:01 |
|   7 |        NESTED LOOPS                       |                            |     1 |   206 |    16   (0)| 00:00:01 |
|   8 |         NESTED LOOPS SEMI                 |                            |     1 |   194 |    15   (0)| 00:00:01 |
|   9 |          NESTED LOOPS                     |                            |     1 |   184 |    13   (0)| 00:00:01 |
|  10 |           NESTED LOOPS                    |                            |     3 |   273 |    10   (0)| 00:00:01 |
|  11 |            VIEW                           |                            |     3 |    21 |     6   (0)| 00:00:01 |
|* 12 |             FILTER                        |                            |       |       |         |             |
|* 13 |              CONNECT BY WITH FILTERING    |                            |       |       |         |             |
|  14 |               TABLE ACCESS BY INDEX ROWID | GG_TECH_OBJECT_NODE      |       |       |         |             |
|* 15 |                INDEX RANGE SCAN           | IDX_TECH_OBJECT_ID1        |     1 |     7 |     3   (0)| 00:00:01 |
|  16 |               NESTED LOOPS                |                            |       |       |         |             |
|  17 |                BUFFER SORT                |                            |       |       |         |             |
|  18 |                 CONNECT BY PUMP           |                            |       |       |         |             |
|  19 |                TABLE ACCESS BY INDEX ROWID| GG_TECH_OBJECT_NODE      |     3 |    72 |     6   (0)| 00:00:01 |
|* 20 |                 INDEX RANGE SCAN          | IDX_TECH_OBJECT_PARENT_ID1 |     3 |       |     3   (0)| 00:00:01 |
|* 21 |               TABLE ACCESS FULL           | GG_TECH_OBJECT_NODE      |     3 |    72 |     6   (0)| 00:00:01 |
|* 22 |            TABLE ACCESS BY INDEX ROWID    | GG_DEVICE                |     1 |    84 |     2   (0)| 00:00:01 |
|* 23 |             INDEX UNIQUE SCAN             | PK_GG_DEVICE             |     1 |       |     1   (0)| 00:00:01 |
|* 24 |           TABLE ACCESS BY INDEX ROWID     | GG_CLASSIFY_CARD          |     1 |    93 |     1   (0)| 00:00:01 |
|* 25 |            INDEX UNIQUE SCAN              | SYS_C00468549              |     1 |       |     0   (0)| 00:00:01 |
|* 26 |          INDEX RANGE SCAN                 | IDX_TECH_NODE_ID1          |   587K|  5736K|     2   (0)| 00:00:01 |
|* 27 |         INDEX RANGE SCAN                  | PK_GG_FL_DEVICE          |     2 |    24 |     1   (0)| 00:00:01 |
|* 28 |        TABLE ACCESS BY INDEX ROWID        | GG_FUNCTION_LOCATION     |     1 |    36 |     1   (0)| 00:00:01 |
|* 29 |         INDEX UNIQUE SCAN                 | PK_GG_FUNCTION_LOCATION  |     1 |       |     0   (0)| 00:00:01 |
|* 30 |       INDEX RANGE SCAN                    | IDX_TECH_OBJECT_ID1        |     1 |       |     2   (0)| 00:00:01 |
|  31 |    HASH UNIQUE                            |                            |     1 |   339 |    20   (5)| 00:00:01 |
|  32 |     TABLE ACCESS BY INDEX ROWID           | GG_TECH_OBJECT_NODE      |     1 |   103 |     3   (0)| 00:00:01 |
|  33 |      NESTED LOOPS                         |                            |     1 |   339 |    19   (0)| 00:00:01 |
|  34 |       NESTED LOOPS SEMI                   |                            |     1 |   236 |    16   (0)| 00:00:01 |
|  35 |        NESTED LOOPS                       |                            |     1 |   226 |    14   (0)| 00:00:01 |
|  36 |         NESTED LOOPS                      |                            |     1 |   133 |    13   (0)| 00:00:01 |
|  37 |          NESTED LOOPS                     |                            |     3 |   291 |    10   (0)| 00:00:01 |
|  38 |           VIEW                            |                            |     3 |    21 |     6   (0)| 00:00:01 |
|* 39 |            FILTER                         |                            |       |       |         |             |
|* 40 |             CONNECT BY WITH FILTERING     |                            |       |       |         |             |
|  41 |              TABLE ACCESS BY INDEX ROWID  | GG_TECH_OBJECT_NODE      |       |       |         |             |
|* 42 |               INDEX RANGE SCAN            | IDX_TECH_OBJECT_ID1        |     1 |     7 |     3   (0)| 00:00:01 |
|  43 |              NESTED LOOPS                 |                            |       |       |         |             |
|  44 |               BUFFER SORT                 |                            |       |       |         |             |
|  45 |                CONNECT BY PUMP            |                            |       |       |         |             |
|  46 |               TABLE ACCESS BY INDEX ROWID | GG_TECH_OBJECT_NODE      |     3 |    72 |     6   (0)| 00:00:01 |
|* 47 |                INDEX RANGE SCAN           | IDX_TECH_OBJECT_PARENT_ID1 |     3 |       |     3   (0)| 00:00:01 |
|* 48 |              TABLE ACCESS FULL            | GG_TECH_OBJECT_NODE      |     3 |    72 |     6   (0)| 00:00:01 |
|* 49 |           TABLE ACCESS BY INDEX ROWID     | GG_DEVICE                |     1 |    90 |     2   (0)| 00:00:01 |
|* 50 |            INDEX UNIQUE SCAN              | PK_GG_DEVICE             |     1 |       |     1   (0)| 00:00:01 |
|* 51 |          TABLE ACCESS BY INDEX ROWID      | GG_FUNCTION_LOCATION     |     1 |    36 |     1   (0)| 00:00:01 |
|* 52 |           INDEX UNIQUE SCAN               | PK_GG_FUNCTION_LOCATION  |     1 |       |     0   (0)| 00:00:01 |
|* 53 |         TABLE ACCESS BY INDEX ROWID       | GG_CLASSIFY_CARD          |     1 |    93 |     1   (0)| 00:00:01 |
|* 54 |          INDEX UNIQUE SCAN                | SYS_C00468549              |     1 |       |     0   (0)| 00:00:01 |
|* 55 |        INDEX RANGE SCAN                   | IDX_TECH_NODE_ID1          |   587K|  5736K|     2   (0)| 00:00:01 |
|* 56 |       INDEX RANGE SCAN                    | IDX_TECH_OBJECT_ID1        |     1 |       |     2   (0)| 00:00:01 |
------------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
  12 - filter("N"."NODE_TYPE"=2)
  13 - filter("N"."TECH_OBJECT_ID"=15773325)
  15 - access("N"."TECH_OBJECT_ID"=15773325)
  20 - access("N"."PARENT_ID"=NULL)
  21 - access("N"."PARENT_ID"=NULL)
  22 - filter("D"."IS_SHARE_DEVICE"=1 AND "D"."CURRENT_STATUS"=0)
  23 - access("TAB"."TECH_OBJECT_ID"="D"."DEVICE_ID")
  24 - filter("C"."ALIAS_NAME"='A176')
  25 - access("D"."CLASSIFY_ID"="C"."CLASSIFY_ID")
  26 - access("N"."TECH_OBJECT_ID"="D"."DEVICE_ID" AND "N"."NODE_TYPE"=2)
  27 - access("L"."DEVICE_ID"="D"."DEVICE_ID")
  28 - filter("F"."SITE_ID"=1021)
  29 - access("F"."FUNCTION_LOCATION_ID"="L"."FUNCTION_LOCATION_ID")
  30 - access("N"."TECH_OBJECT_ID"="F"."FUNCTION_LOCATION_ID")
  39 - filter("N"."NODE_TYPE"=2)
  40 - filter("N"."TECH_OBJECT_ID"=15773325)
  42 - access("N"."TECH_OBJECT_ID"=15773325)
  47 - access("N"."PARENT_ID"=NULL)
  48 - access("N"."PARENT_ID"=NULL)
  49 - filter("D"."IS_SHARE_DEVICE"=0 AND "D"."CURRENT_STATUS"=0)
  50 - access("TAB"."TECH_OBJECT_ID"="D"."DEVICE_ID")
  51 - filter("F"."SITE_ID"=1021)
  52 - access("F"."FUNCTION_LOCATION_ID"="D"."FUNCTION_LOCATION_ID")
  53 - filter("C"."ALIAS_NAME"='A176')
  54 - access("D"."CLASSIFY_ID"="C"."CLASSIFY_ID")
  55 - access("N"."TECH_OBJECT_ID"="D"."DEVICE_ID" AND "N"."NODE_TYPE"=2)
  56 - access("N"."TECH_OBJECT_ID"="F"."FUNCTION_LOCATION_ID")
统计信息
----------------------------------------------------------
          7  recursive calls
          0  db block gets
        738  consistent gets
          0  physical reads
          0  redo size
       2606  bytes sent via SQL*Net to client
      10273  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
         18  sorts (memory)
          0  sorts (disk)
          1  rows processed

   用另一种方式实现分页。
SELECT AB.*
  FROM  (SELECT tt.*,row_number()over(ORDER BY SORT_NO, name) nr
                   from (SELECT DISTINCT (D.DEVICE_ID),
                                         D.NAME,
                                         N.Full_Path SORT_NO,
                                         F.FUNCTION_LOCATION_ID
                           from GG_device D,
                                GG_CLASSIFY_CARD C,
                                GG_function_location F,
                                GG_fl_device L,
                                GG_tech_object_node n,
                                (SELECT N.TECH_OBJECT_ID
                                   FROM GG_TECH_OBJECT_NODE N
                                  WHERE N.NODE_TYPE = 2
                                  START WITH N.TECH_OBJECT_ID = 15773325
                                 CONNECT BY PRIOR
                                             N.TECH_OBJECT_NODE_ID = N.PARENT_ID) TAB
                          where F.FUNCTION_LOCATION_ID =
                                L.FUNCTION_LOCATION_ID
                            and L.Device_Id = d.device_id
                            and d.classify_id = c.classify_id
                            AND EXISTS
                          (SELECT 1
                                   FROM GG_TECH_OBJECT_NODE N
                                  WHERE N.TECH_OBJECT_ID = D.DEVICE_ID
                                    AND N.NODE_TYPE = 2)
                            AND D.CURRENT_STATUS = 0
                            AND D.IS_SHARE_DEVICE = 1
                            AND TAB.TECH_OBJECT_ID = D.DEVICE_ID
                            and n.tech_object_id = f.function_location_id
                            AND F.SITE_ID = 1021
                            AND C.ALIAS_NAME IN ('A176')
                         union all
                         SELECT DISTINCT (D.DEVICE_ID),
                                         D.NAME,
                                         N.Full_Path SORT_NO,
                                         F.FUNCTION_LOCATION_ID
                           FROM GG_DEVICE D,
                                GG_CLASSIFY_CARD C,
                                GG_FUNCTION_LOCATION F,
                                GG_tech_object_node n,
                                (SELECT N.TECH_OBJECT_ID
                                   FROM GG_TECH_OBJECT_NODE N
                                  WHERE N.NODE_TYPE = 2
                                  START WITH N.TECH_OBJECT_ID = 15773325
                                 CONNECT BY PRIOR
                                             N.TECH_OBJECT_NODE_ID = N.PARENT_ID) TAB
                          WHERE D.CLASSIFY_ID = C.CLASSIFY_ID
                            AND F.FUNCTION_LOCATION_ID(+) =
                                D.FUNCTION_LOCATION_ID
                            and n.tech_object_id = f.function_location_id
                            AND EXISTS
                          (SELECT 1
                                   FROM GG_TECH_OBJECT_NODE N
                                  WHERE N.TECH_OBJECT_ID = D.DEVICE_ID
                                    AND N.NODE_TYPE = 2)
                            AND D.CURRENT_STATUS = 0
                            AND D.IS_SHARE_DEVICE = 0
                            AND TAB.TECH_OBJECT_ID = D.DEVICE_ID
                            AND F.SITE_ID = 1021
                            AND C.ALIAS_NAME IN ('A176')) tt
                   ) AB where ab.nr between 1 and 25;
  
已用时间:  00: 00: 00.06
执行计划
----------------------------------------------------------
Plan hash value: 3880620066
--------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                   | Name                       | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                            |                            |     2 |  7472 |    42   (8)| 00:00:01 |
|*  1 |  VIEW                                       |                            |     2 |  7472 |    42   (8)| 00:00:01 |
|*  2 |   WINDOW SORT PUSHED RANK                   |                            |     2 |  7446 |    42   (8)| 00:00:01 |
|   3 |    VIEW                                     |                            |     2 |  7446 |    41   (5)| 00:00:01 |
|   4 |     UNION-ALL                               |                            |       |       |         |     |
|   5 |      HASH UNIQUE                            |                            |     1 |   345 |    21   (5)| 00:00:01 |
|   6 |       TABLE ACCESS BY INDEX ROWID           | GG_TECH_OBJECT_NODE      |     1 |   103 |     3   (0)| 00:00:01 |
|   7 |        NESTED LOOPS                         |                            |     1 |   345 |    20   (0)| 00:00:01 |
|   8 |         NESTED LOOPS                        |                            |     1 |   242 |    17   (0)| 00:00:01 |
|   9 |          NESTED LOOPS                       |                            |     1 |   206 |    16   (0)| 00:00:01 |
|  10 |           NESTED LOOPS SEMI                 |                            |     1 |   194 |    15   (0)| 00:00:01 |
|  11 |            NESTED LOOPS                     |                            |     1 |   254 |    13   (0)| 00:00:01 |
|  12 |             NESTED LOOPS                    |                            |     3 |   273 |    10   (0)| 00:00:01 |
|  13 |              VIEW                           |                            |     3 |    21 |     6   (0)| 00:00:01 |
|* 14 |               FILTER                        |                            |       |       |         |     |
|* 15 |                CONNECT BY WITH FILTERING    |                            |       |       |         |     |
|  16 |                 TABLE ACCESS BY INDEX ROWID | GG_TECH_OBJECT_NODE      |       |       |         |     |
|* 17 |                  INDEX RANGE SCAN           | IDX_TECH_OBJECT_ID1        |     1 |     7 |     3   (0)| 00:00:01 |
|  25 |                 NESTED LOOPS                |                            |       |       |         |     |
|  19 |                  BUFFER SORT                |                            |       |       |         |     |
|  20 |                   CONNECT BY PUMP           |                            |       |       |         |     |
|  21 |                  TABLE ACCESS BY INDEX ROWID| GG_TECH_OBJECT_NODE      |     3 |    72 |     6   (0)| 00:00:01 |
|* 22 |                   INDEX RANGE SCAN          | IDX_TECH_OBJECT_PARENT_ID1 |     3 |       |     3   (0)| 00:00:01 |
|* 23 |                 TABLE ACCESS FULL           | GG_TECH_OBJECT_NODE      |     3 |    72 |     6   (0)| 00:00:01 |
|* 24 |              TABLE ACCESS BY INDEX ROWID    | GG_DEVICE                |     1 |    84 |     2   (0)| 00:00:01 |
|* 25 |               INDEX UNIQUE SCAN             | PK_GG_DEVICE             |     1 |       |     1   (0)| 00:00:01 |
|* 26 |             TABLE ACCESS BY INDEX ROWID     | GG_CLASSIFY_CARD          |     1 |    93 |     1   (0)| 00:00:01 |
|* 27 |              INDEX UNIQUE SCAN              | SYS_C00468549              |     1 |       |     0   (0)| 00:00:01 |
|* 28 |            INDEX RANGE SCAN                 | IDX_TECH_NODE_ID1          |   587K|  5736K|     2   (0)| 00:00:01 |
|* 29 |           INDEX RANGE SCAN                  | PK_GG_FL_DEVICE          |     2 |    24 |     1   (0)| 00:00:01 |
|* 30 |          TABLE ACCESS BY INDEX ROWID        | GG_FUNCTION_LOCATION     |     1 |    36 |     1   (0)| 00:00:01 |
|* 31 |           INDEX UNIQUE SCAN                 | PK_GG_FUNCTION_LOCATION  |     1 |       |     0   (0)| 00:00:01 |
|* 32 |         INDEX RANGE SCAN                    | IDX_TECH_OBJECT_ID1        |     1 |       |     2   (0)| 00:00:01 |
|  33 |      HASH UNIQUE                            |                            |     1 |   339 |    20   (5)| 00:00:01 |
|  34 |       TABLE ACCESS BY INDEX ROWID           | GG_TECH_OBJECT_NODE      |     1 |   103 |     3   (0)| 00:00:01 |
|  35 |        NESTED LOOPS                         |                            |     1 |   339 |    19   (0)| 00:00:01 |
|  36 |         NESTED LOOPS SEMI                   |                            |     1 |   236 |    16   (0)| 00:00:01 |
|  37 |          NESTED LOOPS                       |                            |     1 |   226 |    14   (0)| 00:00:01 |
|  38 |           NESTED LOOPS                      |                            |     1 |   133 |    13   (0)| 00:00:01 |
|  39 |            NESTED LOOPS                     |                            |     3 |   291 |    10   (0)| 00:00:01 |
|  40 |             VIEW                            |                            |     3 |    21 |     6   (0)| 00:00:01 |
|* 41 |              FILTER                         |                            |       |       |         |     |
|* 42 |               CONNECT BY WITH FILTERING     |                            |       |       |         |     |
|  43 |                TABLE ACCESS BY INDEX ROWID  | GG_TECH_OBJECT_NODE      |       |       |         |     |
|* 44 |                 INDEX RANGE SCAN            | IDX_TECH_OBJECT_ID1        |     1 |     7 |     3   (0)| 00:00:01 |
|  45 |                NESTED LOOPS                 |                            |       |       |         |     |
|  46 |                 BUFFER SORT                 |                            |       |       |         |     |
|  47 |                  CONNECT BY PUMP            |                            |       |       |         |     |
|  48 |                 TABLE ACCESS BY INDEX ROWID | GG_TECH_OBJECT_NODE      |     3 |    72 |     6   (0)| 00:00:01 |
|* 49 |                  INDEX RANGE SCAN           | IDX_TECH_OBJECT_PARENT_ID1 |     3 |       |     3   (0)| 00:00:01 |
|* 50 |                TABLE ACCESS FULL            | GG_TECH_OBJECT_NODE      |     3 |    72 |     6   (0)| 00:00:01 |
|* 51 |             TABLE ACCESS BY INDEX ROWID     | GG_DEVICE                |     1 |    90 |     2   (0)| 00:00:01 |
|* 52 |              INDEX UNIQUE SCAN              | PK_GG_DEVICE             |     1 |       |     1   (0)| 00:00:01 |
|* 53 |            TABLE ACCESS BY INDEX ROWID      | GG_FUNCTION_LOCATION     |     1 |    36 |     1   (0)| 00:00:01 |
|* 54 |             INDEX UNIQUE SCAN               | PK_GG_FUNCTION_LOCATION  |     1 |       |     0   (0)| 00:00:01 |
|* 55 |           TABLE ACCESS BY INDEX ROWID       | GG_CLASSIFY_CARD          |     1 |    93 |     1   (0)| 00:00:01 |
|* 56 |            INDEX UNIQUE SCAN                | SYS_C00468549              |     1 |       |     0   (0)| 00:00:01 |
|* 57 |          INDEX RANGE SCAN                   | IDX_TECH_NODE_ID1          |   587K|  5736K|     2   (0)| 00:00:01 |
|* 58 |         INDEX RANGE SCAN                    | IDX_TECH_OBJECT_ID1        |     1 |       |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------------------------------------------------------


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


   1 - filter("AB"."NR">=1 AND "AB"."NR"<=25)
   2 - filter(ROW_NUMBER() OVER ( ORDER BY "SORT_NO","NAME")<=25)
  14 - filter("N"."NODE_TYPE"=2 AND 1<=25)
  15 - filter("N"."TECH_OBJECT_ID"=15773325)
  17 - access("N"."TECH_OBJECT_ID"=15773325)
  22 - access("N"."PARENT_ID"=NULL)
  23 - access("N"."PARENT_ID"=NULL)
  24 - filter("D"."IS_SHARE_DEVICE"=1 AND "D"."CURRENT_STATUS"=0)
  25 - access("TAB"."TECH_OBJECT_ID"="D"."DEVICE_ID")
  26 - filter("C"."ALIAS_NAME"='A176')
  27 - access("D"."CLASSIFY_ID"="C"."CLASSIFY_ID")
  28 - access("N"."TECH_OBJECT_ID"="D"."DEVICE_ID" AND "N"."NODE_TYPE"=2)
  29 - access("L"."DEVICE_ID"="D"."DEVICE_ID")
  30 - filter("F"."SITE_ID"=1021)
  31 - access("F"."FUNCTION_LOCATION_ID"="L"."FUNCTION_LOCATION_ID")
  32 - access("N"."TECH_OBJECT_ID"="F"."FUNCTION_LOCATION_ID")
  41 - filter("N"."NODE_TYPE"=2 AND 1<=25)
  42 - filter("N"."TECH_OBJECT_ID"=15773325)
  44 - access("N"."TECH_OBJECT_ID"=15773325)
  49 - access("N"."PARENT_ID"=NULL)
  50 - access("N"."PARENT_ID"=NULL)
  51 - filter("D"."IS_SHARE_DEVICE"=0 AND "D"."CURRENT_STATUS"=0)
  52 - access("TAB"."TECH_OBJECT_ID"="D"."DEVICE_ID")
  53 - filter("F"."SITE_ID"=1021)
  54 - access("F"."FUNCTION_LOCATION_ID"="D"."FUNCTION_LOCATION_ID")
  55 - filter("C"."ALIAS_NAME"='A176')
  56 - access("D"."CLASSIFY_ID"="C"."CLASSIFY_ID")
  57 - access("N"."TECH_OBJECT_ID"="D"."DEVICE_ID" AND "N"."NODE_TYPE"=2)
  58 - access("N"."TECH_OBJECT_ID"="F"."FUNCTION_LOCATION_ID")
统计信息
----------------------------------------------------------
          8  recursive calls
          0  db block gets
        863  consistent gets
          0  physical reads
          0  redo size
       2890  bytes sent via SQL*Net to client
      10807  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
         76  sorts (memory)
          0  sorts (disk)
          1  rows processed  
作者:guogang83 发表于2014-8-20 19:42:40 原文链接
阅读:0 评论:0 查看评论

相关 [oracle rownum 计划] 推荐:

Oracle rownum影响执行计划

- - CSDN博客数据库推荐文章
   今天调优一条SQL语句,由于SQL比较复杂,用autotrace很难一眼看出哪里出了问题,直接上10046.                                   N.TECH_OBJECT_NODE_ID = N.PARENT_ID) TAB.                                   N.TECH_OBJECT_NODE_ID = N.PARENT_ID) TAB.

Oracle中rownum的用法解析

- - CSDN博客数据库推荐文章
对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,且rownum不能以任何表的名称作为前缀. (1) rownum 对于等于某值的查询条件. 如果希望找到学生表中第一条学生的信息,可以使用rownum=1作为条件.

oracle执行计划

- - Oracle - 数据库 - ITeye博客
所谓执行计划,顾名思义,就是对一个查询任务,做出一份怎样去完成任务的详细方案. 举个生活中的例子,我从珠海要去英国,我可以选择先去香港然后转机,也 可以先去北京转机,或者去广州也可以. 但是到底怎样去英国划算,也就是我的费用最少,这是一件值得考究的事情. 同样对于查询而言,我们提交的SQL仅仅是 描述出了我们的目的地是英国,但至于怎么去,通常我们的SQL中是没有给出提示信息的,是由数据库来决定的.

Oracle执行计划详解

- - Oracle - 数据库 - ITeye博客
本文地址: http://blog.chinaunix.net/u3/107265/showart_2192657.html.     本文全面详细介绍oracle执行计划的相关的概念,访问数据的存取方法,表之间的连接等内容.     并有总结和概述,便于理解与记忆!.     Recursive Sql概念.

oracle sql 执行计划分析

- - CSDN博客数据库推荐文章
oracle sql 执行计划分析.     今天是2013-10-08,时间过的非常快,十月一就这样过去了,回想一下我感觉还是蛮不错的,1号与Amy相约青岛,两个人痛快的玩了两天,我们拍了很多照片,也感受到了彼此的快乐. 四号到家开始在家干农活,在昨天的晚上我和我爸妈一直忙到晚上11点才把所有的棒子都剥完了.

<让oracle跑得更快-5> 执行计划

- - ITeye博客
如果要 分析某条(不是整体性能,后面还会讲到awr报告,会再次说明)sql的性能问题,通常来讲,首先要去看sql的执行计划,看看sql的每一步执行计划是否存在问题. 如果一条sql平时执行得都很好,却有一天突然性能很差,如果排除了系统资源和阻塞的原因,那么基本上可以断定是执行计划出了问题. 看懂执行计划便成了sql优化(大多数情况下,sql优化指的是sql的性能问题定位)的先决条件.

oracle如何获得客户端sql执行计划以便优化sql(三)

- - CSDN博客数据库推荐文章
oracle如何获得客户端sql执行计划以便优化sql.    今天是2013-09-25日,继续学习sql优化这一部分,在之前写过怎么获得sql的执行计划两篇笔记. 虽然笔记有点粗糙,但是如果耐心看,还是发现点东西的.   也就是刚刚学习的一个系统包dbms_system中几个procedure的使用:.

Oracle 收购 Ksplice

- feng823 - LinuxTOY
实现无需重启即可为 Linux 内核打安全补丁的 Ksplice 被 Oracle 收购. 在被收购前, Ksplice 为 Fedora, Ubuntu 免费提供该功能,对于 RHEL 和 CentOS 则需要订阅其产品. Oracle 表示将把 Ksplice 带来的零宕机安全更新功能添加到 Oracle 产品订阅服务中,同时停止对其他企业级 Linux 发行版的支持,将 Oracle Unbreakable Linux 打造成唯一具备零宕机安全更新功能的企业级 Linux 发行版.

Linux Ksplice,MySQL and Oracle

- Syn - DBA Notes
Oracle 在 7 月份收购了 Ksplice. 使用了 Ksplice 的 Linux 系统,为 Kernel 打补丁无需重启动,做系统维护的朋友应该明白这是一个杀手级特性. 现在该产品已经合并到 Oracle Linux 中. 目前已经有超过 700 家客户,超过 10 万套系统使用了 Ksplice (不知道国内是否已经有用户了.