Oracle rownum影响执行计划

今天调优一条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  

Oracle rownum影响执行计划,布布扣,bubuko.com

时间: 2024-10-12 18:06:54

Oracle rownum影响执行计划的相关文章

Oracle查看SQL执行计划的方式

Oracle查看SQL执行计划的方式   获取Oracle sql执行计划并查看执行计划,是掌握和判断数据库性能的基本技巧.下面案例介绍了多种查看sql执行计划的方式: 基本有以下几种方式: 1.通过sql_trace初始化参数 2.通过Autotrace 3.通过explain plan 4.通过dbms_xplan.display_cursor 5.通过dbms_xplan.display_awr 6.通过10046事件 1.通过explain plan 工具 12:24:00 [email

查询oracle sql的执行计划时,一个很重要的视图--dba_hist_sql_plan

本文的编写得到枯荣长老的大力帮助,在此表示感谢. 本文适用的oracle db版本为oracle 10g或者更高版本. 之所以说这个视图很重要,是因为该视图中有一列是在awrsqrpt报告中没有的.这一列就是 filter_predicates列. SELECT plan_hash_value, TO_CHAR(RAWTOHEX(child_address)), TO_NUMBER(child_number), id, LPAD(' ', DEPTH) || operation operatio

Oracle数据库查看执行计划

基于ORACLE的应用系统很多性能问题,是由应用系统SQL性能低劣引起的,所以,SQL的性能优化很重要,分析与优化SQL的性能我们一般通过查看该SQL的执行计划,本文就如何看懂执行计划,以及如何通过分析执行计划对SQL进行优化做相应说明. 一.什么是执行计划(explain plan) 执行计划:一条查询语句在ORACLE中的执行过程或访问路径的描述. 二.如何查看执行计划 1: 在PL/SQL下按F5查看执行计划.第三方工具toad等. 很多人以为PL/SQL的执行计划只能看到基数.优化器.耗

转://看懂Oracle中的执行计划

一.什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述 二.怎样查看Oracle执行计划? 2.1 explain plan for命令查看执行计划 在sql*plus中,执行如下命令: 1)explain plan for select * from XXXX; 2)select * from table(dbms_xplan.display); 2.2 SET AUTOTRACE ON查看执行计划 语法:SET AUTOT[RACE] {OFF |

Oracle - SPM固定执行计划(一)

一.前言 生产中偶尔会碰到一些sql,有多种执行计划,其中部分情况是统计信息过旧造成的,重新收集下统计信息就行了.但是有些时候重新收集统计信息也解决不了问题,而开发又在嗷嗷叫,没时间让你去慢慢分析原因的时候,这时临时的解决办法是通过spm去固定一个正确的执行计划,等找到真正原因后再解除该spm. 二.解决办法 1. 通过dbms_xplan.display_cursor查看指定sql都有哪些执行计划 SQL> select * from table(dbms_xplan.display_curs

Oracle 查询真实执行计划

什么是真实执行计划 获取Oracle的执行计划,有几种方式.(本文使用Oracle 11g XE版本,以及普通用户scott登录) explain plan for 有两个步骤: explain plan for ${SQL} select * from table(dbms_xplan.display); 这一个方法可以在PLSQLDev的cmd窗口和sql窗口执行,同时不需要给用户授权. 示例: autotrace 有两个步骤: set autot on 执行${SQL} 但普通用户需要授权

oracle里的执行计划-查看

内容主要来自看书学习的笔记,如下记录了常见查询执行计划的方法. 2.2 如何查看执行计划1.explain plan2.dbms_xplan包3.autotrace4.10046事件5.10053事件6.awr/statspack报告(@?/rdbms/admin/awrsqrpt)7.脚本(display_cursor_9i.sql) 2.2.1 explain planexplain plan for sqlselect * from table(dbms_xplan.display);SQ

最权威Oracle获取SQL执行计划大全

该文档为根据相关资料整理.总结而成,主要讲解Oracle数据库中,获取SQL语句执行计划的最权威.最正确的方法.步骤,此外,还详细说明了每种方法中可选项的意义及使用方法,以方便大家和自己日常工作中查阅使用,因本人未发现本博客支持附件上传功能,需要PDF文件格式的朋友可向我要,也可到群里下载,转载请注明出处. 1.查询v$sql_plan: SQL> col "Query Plan_Table" format a100 SQL> select id,lpad(' ', 2*(

oracle如何查看执行计划

1.在PL/SQL Developer中得到一个SQL的执行计划 输入想要查看执行计划的目标SQL,再按一下快捷键F5就可以了.2.explain plan 命令 explain plan for + 目标SQL select * from table(dbms_xplan.display)3. DBMS_XPLAN 包 1) select * from table(dbms_xplan.display_cursor(null,null,'advanced')) 它用于在SQLPLUS中查看刚刚