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

      分析最近管理的一个系统的数据库报告看到一条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    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值