zoukankan      html  css  js  c++  java
  • SQL优化案例(分区表)

    SELECT COUNT(1) cnt FROM( SELECT MAX(TT.ORG_NO) 服务区域,
           MAX(TT.MR_SECT_NO) ,
           MAX(CBDMC) ,
           MAX(CBYDM) ,
           MAX(CBYXM) ,
           TT.CONS_NO ,
           MAX(HM) ,
           MAX(DZ) ,
           MAX(YHFL) ,
           ROUND(SUM(DF) / COUNT(*), 2) ,
           MAX(DF) ,
           MAX(ZWLXX) ,
           MAX(DYLXX) ,
           DECODE(TT.WARN_MDOE,
                  '01',
                  '催缴通知',
                  '02',
                  '预收代扣',
                  '88',
                  '免发短信') ,tt.pd_value 
      FROM (SELECT B.ORG_NO,
                   B.YM,
    
                   B.MR_SECT_NO,
                   (SELECT RR.NAME FROM R_SECT RR WHERE MR_SECT_NO = B.MR_SECT_NO) CBDMC,
                   (SELECT R.OPERATOR_NO
                      FROM R_OPER_ACTIVITY R
                     WHERE R.MR_SECT_NO = B.MR_SECT_NO
                       AND R.ACT_CODE = '03') CBYDM,
                   (SELECT USER_TITLE
                      FROM AMBER.INDY_USER
                     WHERE USER_NAME = (SELECT R.OPERATOR_NO
                                          FROM R_OPER_ACTIVITY R
                                         WHERE R.MR_SECT_NO = B.MR_SECT_NO
                                           AND R.ACT_CODE = '03')) CBYXM,
                   B.CONS_NO,
                   MAX(B.CONS_NAME) HM,
                   MAX(B.ELEC_ADDR) DZ,
                   MAX(B.CONS_SORT_CODE) YHFL,
                   SUM(A.T_AMT) DF,
                   MAX((SELECT MAX(A1.MOBILE)
                         FROM SGPM.C_CONTACT A1, SGPM.C_CUST_CONS_RELA A2
                        WHERE A1.CUST_ID = A2.CUST_ID
                          AND A2.ORG_NO = B.ORG_NO
                          AND A2.CONS_ID = B.CONS_ID
                          AND A2.RELA_TYPE LIKE '%02%')) ZWLXX,
                   MAX((SELECT MAX(PHONE)
                         FROM SGPM.A_CONS_SUB S
                        WHERE S.CONS_NO = B.CONS_NO
                          AND S.SUB_ITEM = '01')) DYLXX,
                   C.WARN_MDOE,c.pd_value
              FROM ARC_E_CONS_PRC_AMT A, ARC_E_CONS_SNAP B, SGPM.C_RCA_CONS C
             WHERE B.YM BETWEEN '20190501'  AND '20200430'
               AND B.ORG_NO LIKE '3340660'  || '%'
               AND B.MR_SECT_NO BETWEEN '334066001212001'  AND '334066001212020'
               AND A.CALC_ID = B.CALC_ID
               AND A.ORG_NO = B.ORG_NO
               AND A.YM = B.YM
               AND A.PRC_CODE NOT IN ('9999',
                                      '9997',
                                      '9998',
                                      '1180',
                                      '1110',
                                      '1111',
                                      '9111',
                                      '9110')
               AND B.CONS_SORT_CODE != '01'
               AND C.CONS_NO = B.CONS_NO
               AND B.CONS_ID = C.CONS_ID
               AND C.ORG_NO LIKE '3340660'  || '%'
               AND C.RCA_FLAG = '1'
               AND (c.WARN_MDOE= null  OR null  IS NULL)
             GROUP BY B.ORG_NO,
                      B.MR_SECT_NO,
                      B.YM,
                      B.CONS_NO,
                      B.CONS_ID,
                      C.WARN_MDOE,c.pd_value
            HAVING SUM(A.T_AMT) <> '0') TT
     GROUP BY TT.CONS_NO, TT.WARN_MDOE,tt.pd_value);
     
     
    
    SQL Monitoring Report
    
    Global Information
    ------------------------------
     Status              :  EXECUTING                                                                   
     Instance ID         :  4                                                                           
     Session             :  SGPM (3062:34431)                                                           
     SQL ID              :  4sy2hm59ttc05                                                               
     SQL Execution ID    :  67109425                                                                    
     Execution Started   :  06/22/2020 10:07:42                                                         
     First Refresh Time  :  06/22/2020 10:07:58                                                         
     Last Refresh Time   :  06/22/2020 10:08:28                                                         
     Duration            :  47s                                                                         
     Module/Action       :  .SelfCustQueryImplService.getLSQueryDataListPage/TH63-@dyxepm1_1:0622100635 
     Service             :  app1                                                                        
     Program             :  JDBC Thin Client                                                            
    
    Binds
    ========================================================================================================================
    | Name | Position |     Type      |                                       Value                                        |
    ========================================================================================================================
    | :1   |        1 | VARCHAR2(32)  | 20190501                                                                           |
    | :2   |        2 | VARCHAR2(32)  | 20200430                                                                           |
    | :3   |        3 | VARCHAR2(128) | 3340660                                                                            |
    | :4   |        4 | VARCHAR2(128) | 3xxxxxx0                                                                    |
    | :5   |        5 | VARCHAR2(128) | 3xxxxxx0                                                                    |
    | :6   |        6 | VARCHAR2(128) | 33xxxx0                                                                            |
    | :7   |        7 | VARCHAR2(32)  |                                                                                    |
    | :8   |        8 | VARCHAR2(32)  |                                                                                    |
    | :9   |        9 | NUMBER        | 2650                                                                               |
    | :10  |       10 | NUMBER        | 1300                                                                               |
    ========================================================================================================================
    
    Global Stats
    ==================================================================
    | Elapsed |   Cpu   | Concurrency | Cluster  |  Other   | Buffer |
    | Time(s) | Time(s) |  Waits(s)   | Waits(s) | Waits(s) |  Gets  |
    ==================================================================
    |      46 |      14 |        0.00 |     0.01 |       31 |     6M |
    ==================================================================
    
    SQL Plan Monitoring Details (Plan Hash Value=317986502)
    =========================================================================================================================================================================================
    | Id    |                    Operation                     |              Name              |  Rows   | Cost |   Time    | Start  | Execs |   Rows   | Mem | Activity | Activity Detail |
    |       |                                                  |                                | (Estim) |      | Active(s) | Active |       | (Actual) |     |   (%)    |   (# samples)   |
    =========================================================================================================================================================================================
    |     0 | SELECT STATEMENT                                 |                                |         |      |           |        |       |          |     |          |                 |
    |     1 |   TABLE ACCESS BY INDEX ROWID                    | R_SECT                         |       1 |    1 |           |        |       |          |     |          |                 |
    |     2 |    INDEX UNIQUE SCAN                             | R_SECT_PK                      |       1 |    1 |           |        |       |          |     |          |                 |
    |     3 |   TABLE ACCESS BY INDEX ROWID                    | R_OPER_ACTIVITY                |       1 |    1 |           |        |       |          |     |          |                 |
    |     4 |    INDEX RANGE SCAN                              | R_SECT_R_OPER_ACTIVITY_FK      |      11 |    1 |           |        |       |          |     |          |                 |
    |     5 |   TABLE ACCESS BY INDEX ROWID                    | INDY_USER                      |       1 |    1 |           |        |       |          |     |          |                 |
    |     6 |    INDEX UNIQUE SCAN                             | UK_USER_NAME                   |       1 |    1 |           |        |       |          |     |          |                 |
    |     7 |     TABLE ACCESS BY INDEX ROWID                  | R_OPER_ACTIVITY                |       1 |    1 |           |        |       |          |     |          |                 |
    |     8 |      INDEX RANGE SCAN                            | R_SECT_R_OPER_ACTIVITY_FK      |      11 |    1 |           |        |       |          |     |          |                 |
    |  -> 9 |   SORT AGGREGATE                                 |                                |       1 |      |        31 |    +16 | 17171 |    17171 |     |          |                 |
    | -> 10 |    NESTED LOOPS                                  |                                |       1 |    2 |        31 |    +16 | 17171 |    18019 |     |          |                 |
    | -> 11 |     NESTED LOOPS                                 |                                |       1 |    2 |        31 |    +16 | 17171 |    18019 |     |          |                 |
    | -> 12 |      PARTITION RANGE SINGLE                      |                                |       1 |    1 |        31 |    +16 | 17171 |    18012 |     |          |                 |
    | -> 13 |       TABLE ACCESS BY LOCAL INDEX ROWID          | C_CUST_CONS_RELA               |       1 |    1 |        31 |    +16 | 17171 |    18012 |     |          |                 |
    | -> 14 |        INDEX RANGE SCAN                          | IDX_C_CUST_CONS_RELA_CONS_ID   |       1 |    1 |        31 |    +16 | 17171 |    33069 |     |          |                 |
    | -> 15 |      INDEX RANGE SCAN                            | C_CUST_C_CONTACT_FK            |       1 |    1 |        31 |    +16 | 18012 |    18019 |     |          |                 |
    | -> 16 |     TABLE ACCESS BY GLOBAL INDEX ROWID           | C_CONTACT                      |       1 |    1 |        31 |    +16 | 18019 |    18019 |     |          |                 |
    | -> 17 |   SORT AGGREGATE                                 |                                |       1 |      |        31 |    +16 | 19523 |    19523 |     |          |                 |
    |    18 |    PARTITION RANGE ALL                           |                                |       1 |   32 |        39 |     +8 | 19523 |    15462 |     |     6.52 | Cpu (3)         |
    |    19 |     TABLE ACCESS BY LOCAL INDEX ROWID            | A_CONS_SUB                     |       1 |   32 |        43 |     +4 |    2M |    15462 |     |    13.04 | Cpu (6)         |
    | -> 20 |      INDEX RANGE SCAN                            | IDX_A_CONS_SUB_CONSP           |       3 |   31 |        46 |     +2 |    2M |    55226 |     |    69.57 | Cpu (32)        |
    |    21 |   VIEW                                           |                                |       1 | 2525 |           |        |     1 |          |     |          |                 |
    |    22 |    COUNT STOPKEY                                 |                                |         |      |           |        |     1 |          |     |          |                 |
    |    23 |     VIEW                                         |                                |       1 | 2525 |           |        |     1 |          |     |          |                 |
    |    24 |      SORT GROUP BY STOPKEY                       |                                |       1 | 2525 |           |        |     1 |          |     |          |                 |
    |    25 |       VIEW                                       |                                |       1 | 2525 |           |        |     1 |          |     |          |                 |
    |    26 |        FILTER                                    |                                |         |      |           |        |     1 |          |     |          |                 |
    |    27 |         HASH GROUP BY                            |                                |       1 | 2525 |        31 |    +16 |     1 |        0 | 61M |     2.17 | Cpu (1)         |
    | -> 28 |          FILTER                                  |                                |         |      |        31 |    +16 |     1 |    25305 |     |          |                 |
    | -> 29 |           NESTED LOOPS                           |                                |       1 | 2524 |        31 |    +16 |     1 |    25305 |     |          |                 |
    | -> 30 |            NESTED LOOPS                          |                                |       1 | 2524 |        31 |    +16 |     1 |    25305 |     |          |                 |
    | -> 31 |             NESTED LOOPS                         |                                |       1 | 2523 |        31 |    +16 |     1 |    20379 |     |          |                 |
    | -> 32 |              PARTITION RANGE ITERATOR            |                                |       1 | 2522 |        31 |    +16 |     1 |    22004 |     |          |                 |
    | -> 33 |               PARTITION LIST ITERATOR            |                                |       1 | 2522 |        31 |    +16 |     2 |    22004 |     |          |                 |
    | -> 34 |                TABLE ACCESS BY LOCAL INDEX ROWID | ARC_E_CONS_SNAP                |       1 | 2522 |        31 |    +16 |    19 |    22004 |     |          |                 |
    |    35 |                 INDEX RANGE SCAN                 | LOC_ARC_E_CONS_SNAP_SECT_NO    |     237 | 2520 |        31 |    +16 |    19 |    22004 |     |     2.17 | Cpu (1)         |
    | -> 36 |              TABLE ACCESS BY GLOBAL INDEX ROWID  | C_RCA_CONS                     |       1 |    1 |        31 |    +16 | 22004 |    20379 |     |          |                 |
    | -> 37 |               INDEX UNIQUE SCAN                  | PK_C_RCA_CONS                  |       1 |    1 |        31 |    +16 | 22004 |    20520 |     |          |                 |
    |    38 |             PARTITION RANGE AND                  |                                |       1 |    1 |        31 |    +16 | 20379 |    25305 |     |     4.35 | Cpu (2)         |
    |    39 |              PARTITION LIST AND                  |                                |       1 |    1 |        46 |     +1 | 20379 |    25305 |     |     2.17 | Cpu (1)         |
    | -> 40 |               INDEX RANGE SCAN                   | IDX_ARC_E_CONS_PRC_AMT_CALC_ID |       1 |    1 |        31 |    +16 | 20379 |    25305 |     |          |                 |
    | -> 41 |            TABLE ACCESS BY LOCAL INDEX ROWID     | ARC_E_CONS_PRC_AMT             |       1 |    1 |        31 |    +16 | 25305 |    25305 |     |          |                 |
    =========================================================================================================================================================================================
    
    从执行计划上很明显能看出
    | -> 17 |   SORT AGGREGATE                                 |                                |       1 |      |        31 |    +16 | 19523 |    19523 |     |          |                 |
    |    18 |    PARTITION RANGE ALL                           |                                |       1 |   32 |        39 |     +8 | 19523 |    15462 |     |     6.52 | Cpu (3)         |
    |    19 |     TABLE ACCESS BY LOCAL INDEX ROWID            | A_CONS_SUB                     |       1 |   32 |        43 |     +4 |    2M |    15462 |     |    13.04 | Cpu (6)         |
    | -> 20 |      INDEX RANGE SCAN                            | IDX_A_CONS_SUB_CONSP           |       3 |   31 |        46 |     +2 |    2M |    55226 |     |    69.57 | Cpu (32)        |
    该步骤消耗大量资源和时间。
    
    对应的是sql中的标量子查询部分
    MAX((SELECT MAX(PHONE)
                         FROM SGPM.A_CONS_SUB S
                        WHERE S.CONS_NO = B.CONS_NO
                          AND S.SUB_ITEM = '01')) DYLXX,
    A_CONS_SUB表是按照org_no字段做的分区表。
    表数据量7千万。distinct cons_no有3千万(选择性ok)
    PARTITION RANGE ALL 范围分区全扫面。
    很明显是使用分区表未加分区条件。
    修改后:
    MAX((SELECT MAX(PHONE)
                         FROM SGPM.A_CONS_SUB S
                        WHERE S.CONS_NO = B.CONS_NO
                          AND S.ORG_NO = B.ORG_NO
                          AND S.SUB_ITEM = '01')) DYLXX,
    4秒内出结果。
    

      

  • 相关阅读:
    JOI2017FinalC JOIOI 王国
    JOISC2017C 手持ち花火
    P4336 [SHOI2016]黑暗前的幻想乡
    SP104 HIGH
    P3160 [CQOI2012]局部极小值
    P4965 薇尔莉特的打字机
    【BZOJ4361】isn
    P3506 [POI2010]MOT-Monotonicity 2
    P3214 [HNOI2011]卡农
    P3704 [SDOI2017]数字表格
  • 原文地址:https://www.cnblogs.com/muzisanshi/p/13220062.html
Copyright © 2011-2022 走看看