暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【Oracle】标量子查询嵌套子查询消耗较多逻辑读的SQL改写

1、标量子查询嵌套子查询的SQL monitor

Global Information
------------------------------
 Status              :  EXECUTING
 Instance ID         :  1
 Session             :  TBCS (20810:45485)
 SQL ID              :  4kvbp3sq9p28j
 SQL Execution ID    :  16777719
 Execution Started   :  04/02/2018 16:54:35
 First Refresh Time  :  04/02/2018 16:54:41
 Last Refresh Time   :  04/02/2018 17:08:55
 Duration            :  860s
 Module/Action       :  UnifyFileDeal@ncrminf1 (TNS V1-V3)/-
 Service             :  crmdb2
 Program             :  UnifyFileDeal@ncrminf1 (TNS V1-V3)

SQL Text
------------------------------
select distinct '',
                a.groupid "集团编码",
                b.custname "集团名称",
                a.corpscope "集团价值级别",
                b.address "集团地址",
                (select c.NAME
                   from tbcs.BUSSCUSTSUBS c
                  where a.custid = c.custid
                    and c.status = 'stcmNml'
                    and rownum = 1) "联系人姓名",
                (select c.SERVNUMBER
                   from tbcs.BUSSCUSTSUBS c
                  where a.custid = c.custid
                    and c.status = 'stcmNml'
                    and rownum = 1) "联系人电话",
                d.custmgr "客户经理编码",
                e.OPERNAME "客户经理名称",
                e.CONTACTPHONE "客户经理联系电话",
                d.region "归属地市",
                (DECODE(d.REGION,
                        11,
                        '苏州',
                        12,
                        '淮安',
                        13,
                        '宿迁',
                        14,
                        '南京',
                        15,
                        '连云港',
                        16,
                        '徐州',
                        17,
                        '常州',
                        18,
                        '镇江',
                        19,
                        '无锡',
                        20,
                        '南通',
                        21,
                        '泰州',
                        22,
                        '盐城',
                        23,
                        '扬州')) "归属地市名称",
                (SELECT m.orgid
                   FROM tbcs.V_ESOP_ORGANIZATION_M M
                  WHERE M.PARENTID = 'M' || m.region
                    AND M.ESOP_TYPE = 4
                    AND ROWNUM = 1
                  START WITH M.ORGID = (SELECT V.PARENTID
                                          FROM tbcs.V_ESOP_ORGANIZATION_M V
                                         WHERE V.ORGID = e.OPERID
                                           AND V.ESOP_TYPE = 4)
                         AND M.ESOP_TYPE = 4
                 CONNECT BY PRIOR M.PARENTID = M.ORGID
                        AND M.ESOP_TYPE = 4) "归属区域",
                (SELECT m.orgname
                   FROM tbcs.V_ESOP_ORGANIZATION_M M
                  WHERE M.PARENTID = 'M' || m.region
                    AND M.ESOP_TYPE = 4
                    AND ROWNUM = 1
                  START WITH M.ORGID = (SELECT V.PARENTID
                                          FROM tbcs.V_ESOP_ORGANIZATION_M V
                                         WHERE V.ORGID = e.OPERID
                                           AND V.ESOP_TYPE = 4)
                         AND M.ESOP_TYPE = 4
                 CONNECT BY PRIOR M.PARENTID = M.ORGID
                        AND M.ESOP_TYPE = 4) "归属区域名称",
                (SELECT v.orgid
                   FROM tbcs.V_ESOP_ORGANIZATION_M V
                  WHERE V.ORGID = (SELECT V.PARENTID
                                     FROM tbcs.V_ESOP_ORGANIZATION_M V
                                    WHERE V.ORGID = e.OPERID
                                      AND V.ESOP_TYPE = 4)
                    AND V.ESOP_TYPE = 4
                    AND ROWNUM = 1) "归属营业部",
                (SELECT V.ORGNAME
                   FROM tbcs.V_ESOP_ORGANIZATION_M V
                  WHERE V.ORGID = (SELECT V.PARENTID
                                     FROM tbcs.V_ESOP_ORGANIZATION_M V
                                    WHERE V.ORGID = e.OPERID
                                      AND V.ESOP_TYPE = 4)
                    AND V.ESOP_TYPE = 4
                    AND ROWNUM = 1) "归属营业部名称",
                a.custid "CRM集团编码",
                decode(trunc(b.createdate, 'hh'),
                       trunc(sysdate, 'hh') - 1 / 24,
                       'A',
                       'M') "操作类型",
                b.status,
                a.UNITKIND,
                b.POSTCODE,
                a.GROUPSERVICELEVEL,
                b.certtype,
                b.certid,
                a.vocaionkind1,
                (SELECT CM.EMAIL
                   FROM TBCS.CM_CU_RELATIONINFO CM
                  WHERE cm.mobileno IN
                        (select buss.servnumber
                           from tbcs.BUSSCUSTSUBS BUSS
                          WHERE BUSS.STATUS = 'stcmNml'
                            AND buss.roletype = 'MemberSort0300'
                            AND BUSS.CUSTID = a.custid
                            AND BUSS.STATUS = 'stcmNml'
                            AND BUSS.REGION = 12)
                    AND cm.email IS NOT NULL
                    AND ROWNUM = 1)
  from tbcs.group_customer             a,
       tbcs.customer                   b,
       tbcs.cm_cu_groupcustservchannel d,
       tbcs.operator                   e,
       tbcs.organization               g,
       tbcs.reception                  h
 where a.custid = b.custid
   and a.custid = d.custid
   and d.custmgr = e.OPERID
   and e.orgid = g.ORGID
   and h.custid = a.custid
   and h.recdefid in
       ('GroupCustInfoLog', 'ManagerAssign', 'BusscustSubsManage')
   and h.recdate >= trunc(sysdate, 'hh') - 1 / 24
   and h.recdate < trunc(sysdate, 'hh')
   and h.region = 12
   and d.region = 12

Global Stats
============================================================================================
| Elapsed |   Cpu   |    IO    | Concurrency | Cluster  |  Other   | Buffer | Read | Read  |
| Time(s) | Time(s) | Waits(s) |  Waits(s)   | Waits(s) | Waits(s) |  Gets  | Reqs | Bytes |
============================================================================================
|    1003 |     985 |     0.04 |        0.00 |     0.01 |       18 |   186M |   29 | 232KB |
============================================================================================

SQL Plan Monitoring Details (Plan Hash Value=1650826172)
======================================================================================================================================================================================================================
| Id    |                       Operation                       |            Name             |  Rows   | Cost  |   Time    | Start  | Execs |   Rows   | Read | Read  | Mem | Activity | Activity Detail | Progress |
|       |                                                       |                             | (Estim) |       | Active(s) | Active |       | (Actual) | Reqs | Bytes |     |   (%)    |   (# samples)   |          |
======================================================================================================================================================================================================================
|     0 | SELECT STATEMENT                                      |                             |         |       |      1090 |     +6 |   165 |      165 |      |       |     |          |                 |          |
|     1 |   COUNT STOPKEY                                       |                             |         |       |      1090 |     +6 |   165 |      165 |      |       |     |          |                 |          |
|     2 |    PARTITION LIST ALL                                 |                             |      56 |    35 |      1090 |     +6 |   165 |      165 |      |       |     |          |                 |          |
|     3 |     TABLE ACCESS BY LOCAL INDEX ROWID BATCHED         | BUSSCUSTSUBS                |      56 |    35 |      1090 |     +6 |   165 |      165 |    1 |  8192 |     |          |                 |          |
|     4 |      INDEX RANGE SCAN                                 | IDX_GRP_BUSSCUSTSUBS_CUSTID |      56 |    11 |      1090 |     +6 |   165 |      165 |    8 | 65536 |     |          |                 |          |
|     5 |   COUNT STOPKEY                                       |                             |         |       |      1090 |     +6 |   165 |      165 |      |       |     |          |                 |          |
|     6 |    PARTITION LIST ALL                                 |                             |      56 |    35 |      1090 |     +6 |   165 |      165 |      |       |     |          |                 |          |
|     7 |     TABLE ACCESS BY LOCAL INDEX ROWID BATCHED         | BUSSCUSTSUBS                |      56 |    35 |      1090 |     +6 |   165 |      165 |      |       |     |          |                 |          |
|     8 |      INDEX RANGE SCAN                                 | IDX_GRP_BUSSCUSTSUBS_CUSTID |      56 |    11 |      1090 |     +6 |   165 |      165 |      |       |     |          |                 |          |
|     9 |   COUNT                                               |                             |         |       |       877 |     +6 |    15 |       14 |      |       |     |          |                 |          |
|    10 |    FILTER                                             |                             |         |       |       877 |     +6 |    15 |       14 |      |       |     |          |                 |          |
|    11 |     CONNECT BY WITH FILTERING                         |                             |         |       |       877 |     +6 |    15 |       70 |      |       |     |          |                 |          |
|    12 |      FILTER                                           |                             |         |       |       877 |     +6 |    15 |       14 |      |       |     |          |                 |          |
|    13 |       MAT_VIEW ACCESS FULL                            | V_ESOP_ORGANIZATION_M       |   19761 |    32 |       877 |     +6 |    15 |     312K |      |       |     |          |                 |          |
|    14 |       MAT_VIEW ACCESS FULL                            | V_ESOP_ORGANIZATION_M       |       1 |    32 |       881 |     +2 |    15 |       14 |      |       |     |     0.26 | Cpu (2)         |          |
|    15 |      COUNT                                            |                             |         |       |       877 |     +6 |    70 |       56 |      |       |     |          |                 |          |
|    16 |       HASH JOIN                                       |                             |     213 |    97 |       877 |     +6 |    70 |       56 |      |       |     |          |                 |          |
|    17 |        CONNECT BY PUMP                                |                             |         |       |       877 |     +6 |    70 |       70 |      |       |     |          |                 |          |
|    18 |        MAT_VIEW ACCESS FULL                           | V_ESOP_ORGANIZATION_M       |   19761 |    32 |       877 |     +6 |    70 |       1M |      |       |     |     0.13 | Cpu (1)         |          |
|    19 |   COUNT                                               |                             |         |       |       877 |     +6 |    15 |       14 |      |       |     |          |                 |          |
|    20 |    FILTER                                             |                             |         |       |       877 |     +6 |    15 |       14 |      |       |     |          |                 |          |
|    21 |     CONNECT BY WITH FILTERING                         |                             |         |       |       877 |     +6 |    15 |       70 |      |       |     |          |                 |          |
|    22 |      FILTER                                           |                             |         |       |       877 |     +6 |    15 |       14 |      |       |     |          |                 |          |
|    23 |       MAT_VIEW ACCESS FULL                            | V_ESOP_ORGANIZATION_M       |   19761 |    32 |       877 |     +6 |    15 |     312K |      |       |     |          |                 |          |
|    24 |       MAT_VIEW ACCESS FULL                            | V_ESOP_ORGANIZATION_M       |       1 |    32 |       877 |     +6 |    15 |       14 |      |       |     |          |                 |          |
|    25 |      COUNT                                            |                             |         |       |       877 |     +6 |    70 |       56 |      |       |     |          |                 |          |
|    26 |       HASH JOIN                                       |                             |     213 |    97 |       877 |     +6 |    70 |       56 |      |       |     |     0.26 | Cpu (2)         |          |
|    27 |        CONNECT BY PUMP                                |                             |         |       |       877 |     +6 |    70 |       70 |      |       |     |          |                 |          |
|    28 |        MAT_VIEW ACCESS FULL                           | V_ESOP_ORGANIZATION_M       |   19761 |    32 |       877 |     +6 |    70 |       1M |      |       |     |          |                 |          |
|    29 |   COUNT STOPKEY                                       |                             |         |       |       877 |     +6 |    15 |       14 |      |       |     |          |                 |          |
|    30 |    FILTER                                             |                             |         |       |       877 |     +6 |    15 |       14 |      |       |     |          |                 |          |
|    31 |     MAT_VIEW ACCESS FULL                              | V_ESOP_ORGANIZATION_M       |   19761 |    32 |       877 |     +6 |    15 |    76076 |      |       |     |          |                 |          |
|    32 |     MAT_VIEW ACCESS FULL                              | V_ESOP_ORGANIZATION_M       |       1 |    32 |       877 |     +6 |    15 |       14 |      |       |     |          |                 |          |
|    33 |   COUNT STOPKEY                                       |                             |         |       |       877 |     +6 |    15 |       14 |      |       |     |          |                 |          |
|    34 |    FILTER                                             |                             |         |       |       877 |     +6 |    15 |       14 |      |       |     |          |                 |          |
|    35 |     MAT_VIEW ACCESS FULL                              | V_ESOP_ORGANIZATION_M       |   19761 |    32 |       877 |     +6 |    15 |    76076 |      |       |     |          |                 |          |
|    36 |     MAT_VIEW ACCESS FULL                              | V_ESOP_ORGANIZATION_M       |       1 |    32 |       877 |     +6 |    15 |       14 |      |       |     |          |                 |          |
|    37 |   COUNT STOPKEY                                       |                             |         |       |       885 |     +6 |   165 |        6 |      |       |     |          |                 |          |
| -> 38 |    FILTER                                             |                             |         |       |      1094 |     +6 |   165 |        6 |      |       |     |     1.79 | Cpu (14)        |          |
| -> 39 |     TABLE ACCESS FULL                                 | CM_CU_RELATIONINFO          |   66265 |  1245 |      1097 |     +3 |   165 |      12M |      |       |     |    10.34 | Cpu (81)        |     100% |
|    40 |     PARTITION LIST SINGLE                             |                             |       1 |     6 |       885 |     +6 |   12M |        6 |      |       |     |     1.02 | Cpu (8)         |          |
| -> 41 |      TABLE ACCESS BY LOCAL INDEX ROWID BATCHED        | BUSSCUSTSUBS                |       1 |     6 |      1094 |     +6 |   12M |        6 |    2 | 16384 |     |    71.78 | Cpu (562)       |          |
| -> 42 |       INDEX RANGE SCAN                                | IDX_GROUPMEM_SERVNUMBER     |       2 |     3 |      1094 |     +6 |   12M |     255M |    1 |  8192 |     |    14.30 | Cpu (112)       |          |
|    43 |   SORT UNIQUE                                         |                             |       1 |  394K |      1090 |     +6 |     1 |        0 |      |       |     |          |                 |          |
|    44 |    FILTER                                             |                             |         |       |      1090 |     +6 |     1 |      171 |      |       |     |          |                 |          |
|    45 |     NESTED LOOPS                                      |                             |       1 | 10721 |      1090 |     +6 |     1 |      171 |      |       |     |          |                 |          |
|    46 |      NESTED LOOPS                                     |                             |       1 | 10721 |      1084 |     +6 |     1 |      183 |      |       |     |          |                 |          |
|    47 |       NESTED LOOPS OUTER                              |                             |       1 | 10717 |      1084 |     +6 |     1 |      184 |      |       |     |          |                 |          |
|    48 |        NESTED LOOPS SEMI                              |                             |       1 | 10716 |      1084 |     +6 |     1 |      185 |      |       |     |          |                 |          |
|    49 |         NESTED LOOPS                                  |                             |       1 | 10716 |      1084 |     +6 |     1 |      185 |      |       |     |          |                 |          |
|    50 |          NESTED LOOPS                                 |                             |       1 | 10714 |      1084 |     +6 |     1 |      185 |      |       |     |          |                 |          |
|    51 |           NESTED LOOPS                                |                             |       1 | 10713 |      1084 |     +6 |     1 |      185 |      |       |     |          |                 |          |
|    52 |            PARTITION RANGE ITERATOR                   |                             |       1 | 10684 |      1084 |     +6 |     1 |      185 |      |       |     |          |                 |          |
|    53 |             PARTITION LIST SINGLE                     |                             |       1 | 10684 |      1084 |     +6 |     1 |      185 |      |       |     |          |                 |          |
| -> 54 |              TABLE ACCESS FULL                        | RECEPTION                   |       1 | 10684 |      1094 |     +6 |     1 |      185 |      |       |     |          |                 |      94% |
|    55 |            PARTITION LIST ALL                         |                             |       1 |    29 |      1084 |     +6 |   185 |      185 |      |       |     |          |                 |          |
|    56 |             TABLE ACCESS BY LOCAL INDEX ROWID BATCHED | GROUP_CUSTOMER              |       1 |    29 |      1084 |     +6 |  2578 |      185 |    1 |  8192 |     |          |                 |          |
| -> 57 |              INDEX RANGE SCAN                         | PK_CM_CU_GROUP              |       1 |    28 |      1094 |     +6 |  2578 |      185 |    1 |  8192 |     |          |                 |          |
|    58 |           PARTITION LIST SINGLE                       |                             |       1 |     1 |      1084 |     +6 |   185 |      185 |      |       |     |          |                 |          |
| -> 59 |            INDEX RANGE SCAN                           | PK_GROUPCUSTSERV_CUSTMGRRE  |       1 |     1 |      1094 |     +6 |   185 |      185 |   16 | 128KB |     |          |                 |          |
|    60 |          TABLE ACCESS BY INDEX ROWID                  | T_UCP_STAFFBASICINFO        |       1 |     2 |      1084 |     +6 |   185 |      185 |      |       |     |          |                 |          |
| -> 61 |           INDEX UNIQUE SCAN                           | PK_T_UCP_STAFFBASICINFO     |       1 |     1 |      1094 |     +6 |   185 |      185 |      |       |     |          |                 |          |
| -> 62 |         INDEX UNIQUE SCAN                             | PK_T_UCP_ORGAINFO           |    162K |       |      1094 |     +6 |   185 |      185 |      |       |     |          |                 |          |
|    63 |        INDEX RANGE SCAN                               | PK_UCP_STAFFMAC             |       1 |     1 |           |        |   185 |          |      |       |     |          |                 |          |
| -> 64 |       INDEX RANGE SCAN                                | PK_CM_CU_CUSTOMER           |       1 |     3 |      1094 |     +6 |   185 |      183 |    6 | 49152 |     |          |                 |          |
| -> 65 |      TABLE ACCESS BY GLOBAL INDEX ROWID               | CUSTOMER                    |       1 |     4 |      1094 |     +6 |   185 |      171 |    1 |  8192 |     |          |                 |          |
======================================================================================================================================================================================================================

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

   1 - filter(ROWNUM=1)
   4 - access("C"."CUSTID"=:B1 AND "C"."STATUS"='stcmNml')
   5 - filter(ROWNUM=1)
   8 - access("C"."CUSTID"=:B1 AND "C"."STATUS"='stcmNml')
  10 - filter(("M"."PARENTID"='M'||TO_CHAR("M"."REGION") AND "M"."ESOP_TYPE"=4 AND ROWNUM=1))
  11 - access("M"."ORGID"=PRIOR NULL)
  12 - filter("M"."ORGID"=)
  13 - filter("M"."ESOP_TYPE"=4)
  14 - filter(("V"."ORGID"=:B1 AND "V"."ESOP_TYPE"=4))
  16 - access("connect$_by$_pump$_007"."PRIOR M.PARENTID "="M"."ORGID")
  18 - filter("M"."ESOP_TYPE"=4)
  20 - filter(("M"."PARENTID"='M'||TO_CHAR("M"."REGION") AND "M"."ESOP_TYPE"=4 AND ROWNUM=1))
  21 - access("M"."ORGID"=PRIOR NULL)
  22 - filter("M"."ORGID"=)
  23 - filter("M"."ESOP_TYPE"=4)
  24 - filter(("V"."ORGID"=:B1 AND "V"."ESOP_TYPE"=4))
  26 - access("connect$_by$_pump$_016"."PRIOR M.PARENTID "="M"."ORGID")
  28 - filter("M"."ESOP_TYPE"=4)
  29 - filter(ROWNUM=1)
  30 - filter("V"."ORGID"=)
  31 - filter("V"."ESOP_TYPE"=4)
  32 - filter(("V"."ORGID"=:B1 AND "V"."ESOP_TYPE"=4))
  33 - filter(ROWNUM=1)
  34 - filter("V"."ORGID"=)
  35 - filter("V"."ESOP_TYPE"=4)
  36 - filter(("V"."ORGID"=:B1 AND "V"."ESOP_TYPE"=4))
  37 - filter(ROWNUM=1)
  38 - filter( IS NOT NULL)
  39 - filter("CM"."EMAIL" IS NOT NULL)
  41 - filter(("BUSS"."CUSTID"=:B1 AND "BUSS"."ROLETYPE"='MemberSort0300' AND "BUSS"."STATUS"='stcmNml'))
  42 - access("BUSS"."SERVNUMBER"=:B1 AND "BUSS"."REGION"=12)
  44 - filter(TRUNC(SYSDATE@!,'fmhh')>TRUNC(SYSDATE@!,'fmhh')-.0416666666666666666666666666666666666667)
  54 - filter((INTERNAL_FUNCTION("H"."RECDEFID") AND "H"."RECDATE"<TRUNC(SYSDATE@!,'fmhh') AND
              "H"."RECDATE">=TRUNC(SYSDATE@!,'fmhh')-.0416666666666666666666666666666666666667))
  57 - access("H"."CUSTID"="A"."CUSTID")
  59 - access("A"."CUSTID"="D"."CUSTID" AND "D"."REGION"=12)
  61 - access("D"."CUSTMGR"="BASIC"."STAFFID")
  62 - access("BASIC"."ORGAID"="ORG"."ORGAID")
  63 - access("BASIC"."STAFFID"="MAC"."STAFFID")
  64 - access("A"."CUSTID"="B"."CUSTID")

2、SQL Monitor分析

该SQL主要问题在于如下执行计划部分

======================================================================================================================================================================================================================
| Id    |                       Operation                       |            Name             |  Rows   | Cost  |   Time    | Start  | Execs |   Rows   | Read | Read  | Mem | Activity | Activity Detail | Progress |
|       |                                                       |                             | (Estim) |       | Active(s) | Active |       | (Actual) | Reqs | Bytes |     |   (%)    |   (# samples)   |          |
======================================================================================================================================================================================================================
|    37 |   COUNT STOPKEY                                       |                             |         |       |       885 |     +6 |   165 |        6 |      |       |     |          |                 |          |
| -> 38 |    FILTER                                             |                             |         |       |      1094 |     +6 |   165 |        6 |      |       |     |     1.79 | Cpu (14)        |          |
| -> 39 |     TABLE ACCESS FULL                                 | CM_CU_RELATIONINFO          |   66265 |  1245 |      1097 |     +3 |   165 |      12M |      |       |     |    10.34 | Cpu (81)        |     100% |
|    40 |     PARTITION LIST SINGLE                             |                             |       1 |     6 |       885 |     +6 |   12M |        6 |      |       |     |     1.02 | Cpu (8)         |          |
| -> 41 |      TABLE ACCESS BY LOCAL INDEX ROWID BATCHED        | BUSSCUSTSUBS                |       1 |     6 |      1094 |     +6 |   12M |        6 |    2 | 16384 |     |    71.78 | Cpu (562)       |          |
| -> 42 |       INDEX RANGE SCAN                                | IDX_GROUPMEM_SERVNUMBER     |       2 |     3 |      1094 |     +6 |   12M |     255M |    1 |  8192 |     |    14.30 | Cpu (112)       |          |

  38 - filter( IS NOT NULL)
  39 - filter("CM"."EMAIL" IS NOT NULL)
  41 - filter(("BUSS"."CUSTID"=:B1 AND "BUSS"."ROLETYPE"='MemberSort0300' AND "BUSS"."STATUS"='stcmNml'))
  42 - access("BUSS"."SERVNUMBER"=:B1 AND "BUSS"."REGION"=12)
  44 - filter(TRUNC(SYSDATE@!,'fmhh')>TRUNC(SYSDATE@!,'fmhh')-.0416666666666666666666666666666666666667)

对应于SQL语句中的如下部分

(SELECT CM.EMAIL
                   FROM TBCS.CM_CU_RELATIONINFO CM
                  WHERE cm.mobileno IN
                        (select buss.servnumber
                           from tbcs.BUSSCUSTSUBS BUSS
                          WHERE BUSS.STATUS = 'stcmNml'
                            AND buss.roletype = 'MemberSort0300'
                            AND BUSS.CUSTID = a.custid
                            AND BUSS.STATUS = 'stcmNml'
                            AND BUSS.REGION = 12)
                    AND cm.email IS NOT NULL
                    AND ROWNUM = 1)

由于上述查询是标量子查询的一部分,此时标量子查询只能走类似的nested loop的filter执行计划,而这个标量子查询中又嵌套了子查询,此时就需要递归的filter,而这个递归的子查询在访问tbcs.BUSSCUSTSUBS BUSS表时走索引范围扫描,此时返回255M行数据,这255M数据回表则需要小消耗更多的IO、cpu资源。

3、标量子查询部分一般建议是等价改写

这里将上述消耗性能的标量子查询部分进行了改写,如下:

select distinct '',
                a.groupid "集团编码",
                b.custname "集团名称",
                a.corpscope "集团价值级别",
                b.address "集团地址",
                (select c.NAME
                   from tbcs.BUSSCUSTSUBS c
                  where a.custid = c.custid
                    and c.status = 'stcmNml'
                    and rownum = 1) "联系人姓名",
                (select c.SERVNUMBER
                   from tbcs.BUSSCUSTSUBS c
                  where a.custid = c.custid
                    and c.status = 'stcmNml'
                    and rownum = 1) "联系人电话",
                d.custmgr "客户经理编码",
                e.OPERNAME "客户经理名称",
                e.CONTACTPHONE "客户经理联系电话",
                d.region "归属地市",
                (DECODE(d.REGION,
                        11,
                        '苏州',
                        12,
                        '淮安',
                        13,
                        '宿迁',
                        14,
                        '南京',
                        15,
                        '连云港',
                        16,
                        '徐州',
                        17,
                        '常州',
                        18,
                        '镇江',
                        19,
                        '无锡',
                        20,
                        '南通',
                        21,
                        '泰州',
                        22,
                        '盐城',
                        23,
                        '扬州')) "归属地市名称",
                (SELECT m.orgid
                   FROM tbcs.V_ESOP_ORGANIZATION_M M
                  WHERE M.PARENTID = 'M' || m.region
                    AND M.ESOP_TYPE = 4
                    AND ROWNUM = 1
                  START WITH M.ORGID = (SELECT V.PARENTID
                                          FROM tbcs.V_ESOP_ORGANIZATION_M V
                                         WHERE V.ORGID = e.OPERID
                                           AND V.ESOP_TYPE = 4)
                         AND M.ESOP_TYPE = 4
                 CONNECT BY PRIOR M.PARENTID = M.ORGID
                        AND M.ESOP_TYPE = 4) "归属区域",
                (SELECT m.orgname
                   FROM tbcs.V_ESOP_ORGANIZATION_M M
                  WHERE M.PARENTID = 'M' || m.region
                    AND M.ESOP_TYPE = 4
                    AND ROWNUM = 1
                  START WITH M.ORGID = (SELECT V.PARENTID
                                          FROM tbcs.V_ESOP_ORGANIZATION_M V
                                         WHERE V.ORGID = e.OPERID
                                           AND V.ESOP_TYPE = 4)
                         AND M.ESOP_TYPE = 4
                 CONNECT BY PRIOR M.PARENTID = M.ORGID
                        AND M.ESOP_TYPE = 4) "归属区域名称",
                (SELECT v.orgid
                   FROM tbcs.V_ESOP_ORGANIZATION_M V
                  WHERE V.ORGID = (SELECT V.PARENTID
                                     FROM tbcs.V_ESOP_ORGANIZATION_M V
                                    WHERE V.ORGID = e.OPERID
                                      AND V.ESOP_TYPE = 4)
                    AND V.ESOP_TYPE = 4
                    AND ROWNUM = 1) "归属营业部",
                (SELECT V.ORGNAME
                   FROM tbcs.V_ESOP_ORGANIZATION_M V
                  WHERE V.ORGID = (SELECT V.PARENTID
                                     FROM tbcs.V_ESOP_ORGANIZATION_M V
                                    WHERE V.ORGID = e.OPERID
                                      AND V.ESOP_TYPE = 4)
                    AND V.ESOP_TYPE = 4
                    AND ROWNUM = 1) "归属营业部名称",
                a.custid "CRM集团编码",
                decode(trunc(b.createdate, 'hh'),
                       trunc(sysdate, 'hh') - 1 / 24,
                       'A',
                       'M') "操作类型",
                b.status,
                a.UNITKIND,
                b.POSTCODE,
                a.GROUPSERVICELEVEL,
                b.certtype,
                b.certid,
                a.vocaionkind1,
                j.EMAIL
  from tbcs.group_customer a,
       (select max(cm.email) email, BUSS.CUSTID
          from TBCS.CM_CU_RELATIONINFO CM, tbcs.BUSSCUSTSUBS BUSS
         where BUSS.STATUS = 'stcmNml'
           AND buss.roletype = 'MemberSort0300'
           and BUSS.STATUS = 'stcmNml'
           AND BUSS.REGION = 12
           and cm.mobileno = buss.servnumber
           and cm.email IS NOT NULL
         group by BUSS.CUSTID) j,
       tbcs.customer b,
       tbcs.cm_cu_groupcustservchannel d,
       tbcs.operator e,
       tbcs.organization g,
       tbcs.reception h
 where j.CUSTID(+) = a.custid
   and a.custid = b.custid
   and a.custid = d.custid
   and d.custmgr = e.OPERID
   and e.orgid = g.ORGID
   and h.custid = a.custid
   and h.recdefid in
       ('GroupCustInfoLog', 'ManagerAssign', 'BusscustSubsManage')
   and h.recdate >= trunc(sysdate, 'hh') - 1 / 24
   and h.recdate < trunc(sysdate, 'hh')
   and h.region = 12
   and d.region = 12


Execution Plan
----------------------------------------------------------
Plan hash value: 3368935094

--------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                    | Name                        | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
--------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                             |                             |     1 |   321 | 13092   (5)| 00:00:01 |       |       |
|*  1 |  COUNT STOPKEY                               |                             |       |       |            |          |       |       |
|   2 |   PARTITION LIST ALL                         |                             |    56 |  1400 |    35   (0)| 00:00:01 |     1 |     5 |
|   3 |    TABLE ACCESS BY LOCAL INDEX ROWID BATCHED | BUSSCUSTSUBS                |    56 |  1400 |    35   (0)| 00:00:01 |     1 |     5 |
|*  4 |     INDEX RANGE SCAN                         | IDX_GRP_BUSSCUSTSUBS_CUSTID |    56 |       |    11   (0)| 00:00:01 |     1 |     5 |
|*  5 |  COUNT STOPKEY                               |                             |       |       |            |          |       |       |
|   6 |   PARTITION LIST ALL                         |                             |    56 |  1680 |    35   (0)| 00:00:01 |     1 |     5 |
|   7 |    TABLE ACCESS BY LOCAL INDEX ROWID BATCHED | BUSSCUSTSUBS                |    56 |  1680 |    35   (0)| 00:00:01 |     1 |     5 |
|*  8 |     INDEX RANGE SCAN                         | IDX_GRP_BUSSCUSTSUBS_CUSTID |    56 |       |    11   (0)| 00:00:01 |     1 |     5 |
|   9 |  COUNT                                       |                             |       |       |            |          |       |       |
|* 10 |   FILTER                                     |                             |       |       |            |          |       |       |
|* 11 |    CONNECT BY WITH FILTERING                 |                             |       |       |            |          |       |       |
|* 12 |     FILTER                                   |                             |       |       |            |          |       |       |
|* 13 |      MAT_VIEW ACCESS FULL                    | V_ESOP_ORGANIZATION_M       | 21241 |   497K|    32  (10)| 00:00:01 |       |       |
|* 14 |      MAT_VIEW ACCESS FULL                    | V_ESOP_ORGANIZATION_M       |     1 |    21 |    32  (10)| 00:00:01 |       |       |
|  15 |     COUNT                                    |                             |       |       |            |          |       |       |
|* 16 |      HASH JOIN                               |                             |   228 |  9576 |    98  (12)| 00:00:01 |       |       |
|  17 |       CONNECT BY PUMP                        |                             |       |       |            |          |       |       |
|* 18 |       MAT_VIEW ACCESS FULL                   | V_ESOP_ORGANIZATION_M       | 21241 |   497K|    32  (10)| 00:00:01 |       |       |
|  19 |  COUNT                                       |                             |       |       |            |          |       |       |
|* 20 |   FILTER                                     |                             |       |       |            |          |       |       |
|* 21 |    CONNECT BY WITH FILTERING                 |                             |       |       |            |          |       |       |
|* 22 |     FILTER                                   |                             |       |       |            |          |       |       |
|* 23 |      MAT_VIEW ACCESS FULL                    | V_ESOP_ORGANIZATION_M       | 21241 |   684K|    32  (10)| 00:00:01 |       |       |
|* 24 |      MAT_VIEW ACCESS FULL                    | V_ESOP_ORGANIZATION_M       |     1 |    21 |    32  (10)| 00:00:01 |       |       |
|  25 |     COUNT                                    |                             |       |       |            |          |       |       |
|* 26 |      HASH JOIN                               |                             |   228 | 11628 |    98  (12)| 00:00:01 |       |       |
|  27 |       CONNECT BY PUMP                        |                             |       |       |            |          |       |       |
|* 28 |       MAT_VIEW ACCESS FULL                   | V_ESOP_ORGANIZATION_M       | 21241 |   684K|    32  (10)| 00:00:01 |       |       |
|* 29 |  COUNT STOPKEY                               |                             |       |       |            |          |       |       |
|* 30 |   FILTER                                     |                             |       |       |            |          |       |       |
|* 31 |    MAT_VIEW ACCESS FULL                      | V_ESOP_ORGANIZATION_M       | 21241 |   248K|    32  (10)| 00:00:01 |       |       |
|* 32 |    MAT_VIEW ACCESS FULL                      | V_ESOP_ORGANIZATION_M       |     1 |    21 |    32  (10)| 00:00:01 |       |       |
|* 33 |  COUNT STOPKEY                               |                             |       |       |            |          |       |       |
|* 34 |   FILTER                                     |                             |       |       |            |          |       |       |
|* 35 |    MAT_VIEW ACCESS FULL                      | V_ESOP_ORGANIZATION_M       | 21241 |   435K|    32  (10)| 00:00:01 |       |       |
|* 36 |    MAT_VIEW ACCESS FULL                      | V_ESOP_ORGANIZATION_M       |     1 |    21 |    32  (10)| 00:00:01 |       |       |
|  37 |  SORT UNIQUE                                 |                             |     1 |   321 | 13092   (5)| 00:00:01 |       |       |
|* 38 |   FILTER                                     |                             |       |       |            |          |       |       |
|  39 |    NESTED LOOPS                              |                             |     1 |   321 | 12566   (5)| 00:00:01 |       |       |
|  40 |     NESTED LOOPS                             |                             |     1 |   321 | 12566   (5)| 00:00:01 |       |       |
|  41 |      NESTED LOOPS SEMI                       |                             |     1 |   240 | 12562   (5)| 00:00:01 |       |       |
|  42 |       NESTED LOOPS OUTER                     |                             |     1 |   230 | 12562   (5)| 00:00:01 |       |       |
|  43 |        NESTED LOOPS                          |                             |     1 |   221 | 12561   (5)| 00:00:01 |       |       |
|  44 |         NESTED LOOPS                         |                             |     1 |   182 | 12559   (5)| 00:00:01 |       |       |
|* 45 |          HASH JOIN OUTER                     |                             |     1 |   160 | 12558   (5)| 00:00:01 |       |       |
|  46 |           JOIN FILTER CREATE                 | :BF0000                     |     1 |    98 | 11002   (3)| 00:00:01 |       |       |
|  47 |            NESTED LOOPS                      |                             |     1 |    98 | 11002   (3)| 00:00:01 |       |       |
|  48 |             NESTED LOOPS                     |                             |     1 |    98 | 11002   (3)| 00:00:01 |       |       |
|  49 |              PARTITION RANGE ITERATOR        |                             |     1 |    53 | 10973   (3)| 00:00:01 |   KEY |   KEY |
|  50 |               PARTITION LIST SINGLE          |                             |     1 |    53 | 10973   (3)| 00:00:01 |     1 |     1 |
|* 51 |                TABLE ACCESS FULL             | RECEPTION                   |     1 |    53 | 10973   (3)| 00:00:01 |   KEY |   KEY |
|  52 |              PARTITION LIST ALL              |                             |     1 |       |    28   (0)| 00:00:01 |     1 |    14 |
|* 53 |               INDEX RANGE SCAN               | PK_CM_CU_GROUP              |     1 |       |    28   (0)| 00:00:01 |     1 |    14 |
|  54 |             TABLE ACCESS BY LOCAL INDEX ROWID| GROUP_CUSTOMER              |     1 |    45 |    29   (0)| 00:00:01 |     1 |     1 |
|  55 |           VIEW                               |                             |  5709 |   345K|  1556  (16)| 00:00:01 |       |       |
|  56 |            SORT GROUP BY                     |                             |  5709 |   351K|  1556  (16)| 00:00:01 |       |       |
|  57 |             JOIN FILTER USE                  | :BF0000                     | 26572 |  1634K|  1553  (15)| 00:00:01 |       |       |
|* 58 |              HASH JOIN                       |                             | 26572 |  1634K|  1553  (15)| 00:00:01 |       |       |
|  59 |               PARTITION LIST SINGLE          |                             | 26532 |  1243K|   307   (9)| 00:00:01 |     1 |     1 |
|* 60 |                TABLE ACCESS FULL             | BUSSCUSTSUBS                | 26532 |  1243K|   307   (9)| 00:00:01 |     1 |     1 |
|* 61 |               TABLE ACCESS FULL              | CM_CU_RELATIONINFO          | 66265 |   970K|  1245  (17)| 00:00:01 |       |       |
|  62 |          PARTITION LIST SINGLE               |                             |     1 |    22 |     1   (0)| 00:00:01 |     1 |     1 |
|* 63 |           INDEX RANGE SCAN                   | PK_GROUPCUSTSERV_CUSTMGRRE  |     1 |    22 |     1   (0)| 00:00:01 |     1 |     1 |
|  64 |         TABLE ACCESS BY INDEX ROWID          | T_UCP_STAFFBASICINFO        |     1 |    39 |     2   (0)| 00:00:01 |       |       |
|* 65 |          INDEX UNIQUE SCAN                   | PK_T_UCP_STAFFBASICINFO     |     1 |       |     1   (0)| 00:00:01 |       |       |
|* 66 |        INDEX RANGE SCAN                      | PK_UCP_STAFFMAC             |     1 |     9 |     1   (0)| 00:00:01 |       |       |
|* 67 |       INDEX UNIQUE SCAN                      | PK_T_UCP_ORGAINFO           |   161K|  1581K|     0   (0)| 00:00:01 |       |       |
|* 68 |      INDEX RANGE SCAN                        | PK_CM_CU_CUSTOMER           |     1 |       |     3   (0)| 00:00:01 |       |       |
|  69 |     TABLE ACCESS BY GLOBAL INDEX ROWID       | CUSTOMER                    |     1 |    81 |     4   (0)| 00:00:01 | ROWID | ROWID |
--------------------------------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter(ROWNUM=1)
   4 - access("C"."CUSTID"=:B1 AND "C"."STATUS"='stcmNml')
   5 - filter(ROWNUM=1)
   8 - access("C"."CUSTID"=:B1 AND "C"."STATUS"='stcmNml')
  10 - filter("M"."PARENTID"='M'||TO_CHAR("M"."REGION") AND "M"."ESOP_TYPE"=4 AND ROWNUM=1)
  11 - access("M"."ORGID"=PRIOR "M"."PARENTID")
       filter("M"."ESOP_TYPE"=4)
  12 - filter("M"."ORGID"= (SELECT "V"."PARENTID" FROM "TBCS"."V_ESOP_ORGANIZATION_M" "V" WHERE "V"."ORGID"=:B1 AND
              "V"."ESOP_TYPE"=4))
  13 - filter("M"."ESOP_TYPE"=4)
  14 - filter("V"."ORGID"=:B1 AND "V"."ESOP_TYPE"=4)
  16 - access("connect$_by$_pump$_007"."PRIOR M.PARENTID "="M"."ORGID")
  18 - filter("M"."ESOP_TYPE"=4)
  20 - filter("M"."PARENTID"='M'||TO_CHAR("M"."REGION") AND "M"."ESOP_TYPE"=4 AND ROWNUM=1)
  21 - access("M"."ORGID"=PRIOR "M"."PARENTID")
       filter("M"."ESOP_TYPE"=4)
  22 - filter("M"."ORGID"= (SELECT "V"."PARENTID" FROM "TBCS"."V_ESOP_ORGANIZATION_M" "V" WHERE "V"."ORGID"=:B1 AND
              "V"."ESOP_TYPE"=4))
  23 - filter("M"."ESOP_TYPE"=4)
  24 - filter("V"."ORGID"=:B1 AND "V"."ESOP_TYPE"=4)
  26 - access("connect$_by$_pump$_016"."PRIOR M.PARENTID "="M"."ORGID")
  28 - filter("M"."ESOP_TYPE"=4)
  29 - filter(ROWNUM=1)
  30 - filter("V"."ORGID"= (SELECT "V"."PARENTID" FROM "TBCS"."V_ESOP_ORGANIZATION_M" "V" WHERE "V"."ORGID"=:B1 AND
              "V"."ESOP_TYPE"=4))
  31 - filter("V"."ESOP_TYPE"=4)
  32 - filter("V"."ORGID"=:B1 AND "V"."ESOP_TYPE"=4)
  33 - filter(ROWNUM=1)
  34 - filter("V"."ORGID"= (SELECT "V"."PARENTID" FROM "TBCS"."V_ESOP_ORGANIZATION_M" "V" WHERE "V"."ORGID"=:B1 AND
              "V"."ESOP_TYPE"=4))
  35 - filter("V"."ESOP_TYPE"=4)
  36 - filter("V"."ORGID"=:B1 AND "V"."ESOP_TYPE"=4)
  38 - filter(TRUNC(SYSDATE@!,'fmhh')>TRUNC(SYSDATE@!,'fmhh')-.0416666666666666666666666666666666666667)
  45 - access("J"."CUSTID"(+)="A"."CUSTID")
  51 - filter(("H"."RECDEFID"='BusscustSubsManage' OR "H"."RECDEFID"='GroupCustInfoLog' OR "H"."RECDEFID"='ManagerAssign') AND
              "H"."RECDATE"<TRUNC(SYSDATE@!,'fmhh') AND "H"."RECDATE">=TRUNC(SYSDATE@!,'fmhh')-.0416666666666666666666666666666666666667)
  53 - access("H"."CUSTID"="A"."CUSTID")
  58 - access("CM"."MOBILENO"="BUSS"."SERVNUMBER")
  60 - filter("BUSS"."ROLETYPE"='MemberSort0300' AND "BUSS"."STATUS"='stcmNml')
  61 - filter("CM"."EMAIL" IS NOT NULL)
  63 - access("A"."CUSTID"="D"."CUSTID" AND "D"."REGION"=12)
  65 - access("D"."CUSTMGR"="BASIC"."STAFFID")
  66 - access("BASIC"."STAFFID"="MAC"."STAFFID"(+))
  67 - access("BASIC"."ORGAID"="ORG"."ORGAID")
  68 - access("A"."CUSTID"="B"."CUSTID")

Statistics
----------------------------------------------------------
         64  recursive calls
          0  db block gets
     133932  consistent gets
       4122  physical reads
        648  redo size
       3594  bytes sent via SQL*Net to client
        553  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
         44  sorts (memory)
          0  sorts (disk)
          8  rows processed


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论