您的位置:首页 > 其它

统计信息未收集引发的MERGE JOIN CARTESIAN

2013-04-07 16:10 441 查看
      分析最近管理的一个系统的数据库报告看到一条SQL执行6次,平均执行时间为57s。检查了下SQL,发现语句并无错误,从执行计划中的rows=1来看,应该是统计信息没有收集。检查了下user_tables中的统计信息,确认是没有收集。语句执行速度提升了10倍。

SELECT *
FROM (SELECT INNER_TABLE.*, ROWNUM OUTER_TABLE_ROWNUM
FROM (SELECT EXPERIMENTWORK_PACKAGE.EXPERIMENTWORK_PACKAGE_ID,
EXPERIMENT_WORK.WORK_ID,
EXPERIMENT_WORK.STANDARD_PACKAGE_ID,
EXPERIMENT_WORK.PERIOD_PLAN_ID,
EXPERIMENT_WORK.WORK_NAME,
EXPERIMENT_WORK.WORK_CODE,
EXPERIMENT_WORK.SPECIALTY,
EXPERIMENT_WORK.WORK_CHARACTER,
EXPERIMENT_WORK.PLACE_ID,
EXPERIMENT_WORK.PLACE_NAME,
EXPERIMENT_WORK.PLACE_TYPE,
EXPERIMENT_WORK.MASTER,
EXPERIMENT_WORK.MASTER_ID,
EXPERIMENT_WORK.DEPARTMENT_ID,
EXPERIMENT_WORK.DEPARTMENT_NAME,
EXPERIMENT_WORK.DEPARTMENT_CODE,
EXPERIMENT_WORK.WORK_TEAM,
EXPERIMENT_WORK.WORK_TEAM_CODE,
EXPERIMENT_WORK.WORK_TEAM_ID,
EXPERIMENT_WORK.WORK_PEASONS,
EXPERIMENT_WORK.STANDARD_PACKAGE_NAME,
EXPERIMENT_WORK.WORK_DESCR,
EXPERIMENT_WORK.PLAN_FINISH_TIME,
EXPERIMENT_WORK.CREATOR,
EXPERIMENT_WORK.CREATOR_ID,
EXPERIMENT_WORK.CREATE_TIME,
EXPERIMENT_WORK.ACTUAL_START_TIME,
EXPERIMENT_WORK.ACTUAL_FINISH_TIME,
EXPERIMENT_WORK.WORK_RESULT,
EXPERIMENT_WORK.IS_FIELD_WORK,
EXPERIMENT_WORK.BACK_FLAG,
EXPERIMENT_WORK.IS_INTERRUPTED,
EXPERIMENT_WORK.IS_PLANNED,
EXPERIMENT_WORK.FINISH_FLAG,
EXPERIMENT_WORK.QUALIFIED_FLAG,
EXPERIMENT_WORK.DEVICE_STATUS,
EXPERIMENT_WORK.DEVICE_LOCATION,
EXPERIMENT_WORK.STATE,
EXPERIMENT_WORK.REMARK,
EXPERIMENT_WORK.DATA_FROM,
EXPERIMENT _WORK.INSTRUMENT_MODEL,
EXPERIMENT_WORK.PERIOD_UPDATE_STATE,
EXPERIMENT_WORK.IS_NEED_UPDATE,
EXPERIMENT_WORK.IS_DEFECT,
EXPERIMENT_WORK.TYPE,
EXPERIMENT_WORK.LOCATION_ID,
EXPERIMENT_WORK.FUNCTION_LOCATION_NAME,
EXPERIMENT_WORK.BAY_NAME,
EXPERIMENT_WORK.INSTRUMENT_CODE,
EXPERIMENT_WORK.PLAN_BOUND,
EXPERIMENT_WORK.MANAGE_DEPARTMENT_ID,
EXPERIMENT_WORK.MANAGE_DEPARTMENT,
EXPERIMENT_WORK.PLAN_START_TIME,
EXPERIMENT_WORK.WORK_TYPE,
EXPERIMENT_WORK.VEHICLE_NO,
EXPERIMENT_WORK.IS_NEED_VEHICLE,
EXPERIMENT_WORK.CENTER_SUBSTATION_ID,
EXPERIMENT_WORK.CENTER_SUBSTATION_NAME,
EXPERIMENT_WORK.VEHICLE_TIME,
EXPERIMENT_WORK.MEMBER_NUM,
EXPERIMENT_WORK.IS_SHARE_VEHICLE,
EXPERIMENT_WORK.DRIVER,
EXPERIMENT_WORK.DRIVER_ID,
EXPERIMENT_WORK.SHARE_VEHICLE_TEAM,
EXPERIMENT_WORK.CONTACT_WAY,
EXPERIMENT_WORK.SHARE_VEHICLE_TEAM_IDS,
EXPERIMENT_WORK.IS_COMMISSIONED,
EXPERIMENT_WORK.COMMISSION_WORK_ID,
EXPERIMENT_WORK.OBJECT_NUMBER,
EXPERIMENT_WORK.WORK_STATUS,
EXPERIMENT_WORK.IS_NEED_HIGH_VEHICLE,
EXPERIMENT_WORK.HIGH_VEHICLE_DRIVER,
EXPERIMENT_WORK.HIGH_VEHICLE_NO,
EXPERIMENT_WORK.IS_SPECIFICSAFETOOL,
EXPERIMENTWORK_PACKAGE.PACKAGE_NAME,
EXPERIMENTWORK_PACKAGE.IS_PASSED,
EXPERIMENTWORK_PACKAGE.Package_Id,
STANDARD_PACKAGE.VERSION_NO,
RP_EXPERIMENT_ENVIRONMENT.ENVIRONMENT_NAME,
RP_EXPERIMENT_ENVIRONMENT.ENVIRONMEN TL_PLACE,
RP_EXPERIMENT_ENVIRONMENT.ENVIRONMENT_CHARACTER,
RP_EXPERIMENT_ENVIRONMENT.ENVIRONMENT_DATE,
RP_EXPERIMENT_ENVIRONMENT.ENVIRONMENT_CONCLUSION
FROM EXPERIMENT_WORK,
EXPERIMENTWORK_PACKAGE,
RP_EXPERIMENT_ENVIRONMENT,
STANDARD_PACKAGE,
RP_REPORT_INSTANCE_OBJECT
WHERE EXPERIMENT_WORK.WORK_ID =
EXPERIMENTWORK_PACKAGE.WORK_ID
AND RP_REPORT_INSTANCE_OBJECT.EXPERIMENTWORK_PACKAGE_ID =
EXPERIMENTWORK_PACKAGE.EXPERIMENTWORK_PACKAGE_ID
AND RP_REPORT_INSTANCE_OBJECT.REPORT_INSTANCE_OBJECT_ID =
RP_EXPERIMENT_ENVIRONMENT.REPORT_INSTANCE_OBJECT_ID(+)
AND EXPERIMENTWORK_PACKAGE.PACKAGE_ID =
STANDARD_PACKAGE.STANDARD_PACKAGE_ID
AND EXISTS
(SELECT C.CATALOG_ID
FROM STANDARD_CATALOG C
WHERE C.CATALOG_ID = STANDARD_PACKAGE.CATALOG_ID
START WITH C.PARENT_ID = 0
CONNECT BY PRIOR C.CATALOG_ID = C.PARENT_ID)
AND (RP_EXPERIMENT_ENVIRONMENT.ENVIRONMENT_CONCLUSION = :1 OR
RP_EXPERIMENT_ENVIRONMENT.ENVIRONMENT_CONCLUSION = :2)
AND RP_EXPERIMENT_ENVIRONMENT.ENVIRONMENT_CHARACTER like :3
AND STANDARD_PACKAGE.STANDARD_PACKAGE_NO = :4
AND RP_EXPERIMENT_ENVIRONMENT.ENVIRONMENT_DATE >= :5
AND RP_EXPERIMENT_ENVIRONMENT.ENVIRONMENT_DATE <= :6
AND EXPERIMENT_WORK.SPECIALTY = :7
AND EXPERIMENT_WORK.WORK_TEAM_ID = :8
ORDER BY RP_EXPERIMENT_ENVIRONMENT.ENVIRONMENT_DATE asc nulls last) INNER_TABLE
WHERE ROWNUM <= 18) OUTER_TABLE
WHERE OUTER_TABLE_ROWNUM > 0;

已用时间:  00: 00: 06.93

执行计划
--------------------------------------------------------------------------------------------------------------
| Id  | Operation                            | Name               | Rows  | Bytes | Cost (%CPU)|
----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                     |                              |   1 |  8520 |    38   (3)|
|   1 |  VIEW                                |                              |   1 |  8520 |    38   (3)|
|   2 |   COUNT STOPKEY                      |                              |   |       |            |
|   3 |    VIEW                              |                              |   1 |  8507 |    38   (3)|
|   4 |     SORT ORDER BY STOPKEY            |                              |   1 |   567 |    38   (3)|
|   5 |      FILTER                          |                              |   |       |            |
|   6 |       NESTED LOOPS                   |                              |   1 |   567 |    34   (0)|
|   7 |        NESTED LOOPS                  |                              |   1 |   542 |    33   (0)|
|   8 |         MERGE JOIN CARTESIAN         |                              |   1 |   507 |    32   (0)|
|   9 |          NESTED LOOPS                |                              |   1 |   119 |    14   (0)|
|  10 |           TABLE ACCESS FULL          | RP_EXPERIMENT_ENVIRONMENT    |   1 |    77 |    13   (0)|
|  11 |           TABLE ACCESS BY INDEX ROWID| RP_REPORT_INSTANCE_OBJECT    |   1 |    42 |     1   (0)|
|  12 |            INDEX UNIQUE SCAN         | PK_RP_REPORT_INSTANCE_OBJECT |   1 |       |     1   (0)|
|  13 |          BUFFER SORT                 |                              |   10 |  3880 |    31   (0)|
|  14 |           TABLE ACCESS FULL          | EXPERIMENT_WORK         |   10 |  3880 |    18   (0)|
|  15 |         TABLE ACCESS BY INDEX ROWID  | EXPERIMENTWORK_PACKAGE  |   1 |    35 |     1   (0)|
|  16 |          INDEX RANGE SCAN            | IDX_WORK_ID                  |   2 |       |     1   (0)|
|  17 |        TABLE ACCESS BY INDEX ROWID   | STANDARD_PACKAGE        |   1 |    25 |     1   (0)|
|  18 |         INDEX UNIQUE SCAN            | PK_STANDARD_PACKAGE     |   1 |       |     1   (0)|
|  19 |       FILTER                         |                              |   |       |            |
|  20 |        CONNECT BY WITH FILTERING     |                              |   |       |            |
|  21 |         FILTER                       |                              |   |       |            |
|  22 |          TABLE ACCESS FULL           | STANDARD_CATALOG        |   192 |  1536 |     3   (0)|
|  23 |         HASH JOIN                    |                              |   |       |            |
|  24 |          CONNECT BY PUMP             |                              |   |       |            |
|  25 |          TABLE ACCESS FULL           | STANDARD_CATALOG        |   192 |  1536 |     3   (0)|
|  26 |         TABLE ACCESS FULL            | STANDARD_CATALOG        |   192 |  1536 |     3   (0)|

----------------------------------------------------------------------------------------------------------
统计信息
----------------------------------------------------------                     
          1  recursive calls                                                   
          0  db block gets                                                     
    1159757  consistent gets                                                   
          0  physical reads                                                    
          0  redo size                                                         
       6782  bytes sent via SQL*Net to client                                  
       5334  bytes received via SQL*Net from client                            
          3  SQL*Net roundtrips to/from client                                 
         86  sorts (memory)                                                    
          0  sorts (disk)                                                      
         18  rows processed     

 

执行统计信息后

已用时间:  00: 00: 00.68
执行计划
------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                            | Name                        | Rows  | Bytes | Cost (%CPU)|
---------------------------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT                     |                             |    1 |  8520 |   497   (2)|
|   1 |  VIEW                                |                             |    1 |  8520 |   497   (2)|
|   2 |   COUNT STOPKEY                      |                             |      |       |            |
|   3 |    VIEW                              |                             |    1 |  8507 |   497   (2)|
|   4 |     SORT ORDER BY STOPKEY            |                             |    1 |   618 |   497   (2)|
|   5 |      FILTER                          |                             |      |       |            |
|   6 |       NESTED LOOPS                   |                             |    1 |   618 |   493   (1)|
|   7 |        HASH JOIN                     |                             |    1 |   589 |   492   (1)|
|   8 |         TABLE ACCESS FULL            | RP_EXPERIMENT_ENVIRONMENT   |    8 |   608 |   139   (1)|
|   9 |         HASH JOIN                    |                             |  1003 |   502K|   352   (1)|
|  10 |          NESTED LOOPS                |                             |   997 |   458K|   268   (1)|
|  11 |           TABLE ACCESS FULL          | EXPERIMENT_WORK        |   510 |   214K|   166   (1)|
|  12 |           TABLE ACCESS BY INDEX ROWID| EXPERIMENTWORK_PACKAGE |    2 |    82 |     1   (0)|
|  13 |            INDEX RANGE SCAN          | IDX_WORK_ID                 |    2 |       |     1   (0)|
|  14 |          TABLE ACCESS FULL           | RP_REPORT_INSTANCE_OBJECT   | 24463 |  1003K|    84   (2)|
|  15 |        TABLE ACCESS BY INDEX ROWID   | STANDARD_PACKAGE       |    1 |    29 |     1   (0)|
|  16 |         INDEX UNIQUE SCAN            | PK_STANDARD_PACKAGE    |    1 |       |     1   (0)|
|  17 |       FILTER                         |                             |       |       |            |
|  18 |        CONNECT BY WITH FILTERING     |                             |       |       |            |
|  19 |         FILTER                       |                             |       |       |            |
|  20 |          TABLE ACCESS FULL           | STANDARD_CATALOG       |   218 |  1744 |     3   (0)|
|  21 |         HASH JOIN                    |                             |       |       |            |
|  22 |          CONNECT BY PUMP             |                             |       |       |            |
|  23 |          TABLE ACCESS FULL           | STANDARD_CATALOG       |   218 |  1744 |     3   (0)|
|  24 |         TABLE ACCESS FULL            | STANDARD_CATALOG       |   218 |  1744 |     3   (0)|

-----------------------------------------------------------------------------------------------
统计信息
----------------------------------------------------------
1  recursive calls
0  db block gets
8804  consistent gets
0  physical reads
0  redo size
6811  bytes sent via SQL*Net to client
5334  bytes received via SQL*Net from client
3  SQL*Net roundtrips to/from client
85  sorts (memory)
0  sorts (disk)
18  rows processed
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: