SQL优化改写案例13(OB数据库SQL优化)

发布时间 2023-04-23 16:59:28作者: 小至尖尖

 OB一哥们找我优化条SQL,反馈在OceanBase执行时间很慢需要 3184s才能出结果,安排。

原SQL:

  select M.POLICY_CHARGE_ID as policyChargeId,
       M.POLICY_NO as policyNo,
       M.ENDORSE_NO as endorseNo,
       (select ec.entity_name
          from ENTITY_CODE ec
         where ec.parent_code = 'BA36'
           and ec.entity_code = M.line) as line,--1
       (select o.name
          from iforganization o
         where o.code = M.DEPTGRP_CODE
           and o.parent_id = (select z.org_id
                                from iforganization z
                               where z.code = M.BRANCH_CODE)) as deptgrpCode,
       (select o.name
          from iforganization o
         where o.code = M.DEPT_CODE
           and o.parent_id =
               (select z.org_id
                  from iforganization z
                 where z.code = M.DEPTGRP_CODE
                   and z.parent_id =
                       (select i.org_id
                          from iforganization i
                         where i.code = M.BRANCH_CODE))) as deptCode,
       (select e.name
          from ifemployee e
         where e.code = M.HANDLER_CODE
           and e.unit_code = M.Branch_Code) as handlerCode,
       (SELECT e.entity_name
          FROM entity_code e
         WHERE e.entity_code = M.PRODUCTGRP_CODE
           and e.top_code = 'BA10'
           AND e.parent_code = '1') productgrpName,
       M.DATASOURCE as DATASOURCE,
       M.PRODUCTGRP_CODE as productgrpCode,
       (select c.entity_name
          from entity_code c
         where c.top_code = 'BA53'
           and c.entity_code = M.CHANNELCODE) as channelcode,
       M.MID_CHANNELCODE as midChannelcode,
       M.INSURE_WAY as insureWay,
       M.AGENT_CODE as agentCode,
       M.AGENT_NAME as agentName,
       M.THE4S_CODE as the4sCode,
       (select j.entity_name
          from entity_code j
         where j.top_code = 'BA29'
           and j.entity_code = M.THE4S_CODE) as the4sName,
       M.INSURED_NAME as insuredName,
       M.APPLICANT_NAME as applicantName,
       M.START_DATE as startDate,
       M.END_DATE as endDate,
       M.ISSUE_DATE as issueDate,
       M.SUBPREMIUM as subpremium,
       M.LICENSENO as licenseno,
       (select u.entity_name
          from entity_code u
         where u.top_code = 'BA28'
           and u.entity_code = M.USETYPE) as usetype,
       M.VEHICLECLAIMTYPE as vehicleclaimtype,
       M.ADDVALUETAX as addvaluetax,
       M.AMOUNT_TYPE_I as amountTypeI,
       M.AMOUNT_TYPE_II as amountTypeII,
       M.AMOUNT_TYPE_III as amountTypeIII,
       M.AMOUNT_TYPE_IV as amountTypeIV,
       M.AMOUNT_TYPE_V as amountTypeV,
       M.AMOUNT_OVERALL as amountOverall,
       M.AMOUNT_OVERALL_TOTAL as amountOverallTotal,
       M.AMOUNT_OVERALL_BRANCH as amountOverallBranch,
       M.AMOUNT_OVERALL_DEPTGRP as amountOverallDeptgrp
  from CC_POLICY_CHARGE M
 where 1 = 1
  AND M.UNIQUE_CODE LIKE '3010100%'
  AND M.LINE = '1'
  AND M.CHANNELCODE IN ('C001', 'C002', 'C003', 'C004', 'C005', 'C006', 'C007',
                        'C008','C009','C010','CAND','C012','C013','C014','C015')
  AND M.INSURE_WAY IN ('11','12','14','16','17','18','21',
                       '22','23','25','27','28','29','31','32','33','36','37','38','39','40',
                       '19','41','42','43','44','45','46','47','51')
  AND M.BRANCH_CODE = '3010100'
  AND ROWNUM <= 500000;

原SQL执行计划:

===============================================================
|ID|OPERATOR        |NAME                   |EST. ROWS|COST   |
---------------------------------------------------------------
|0 |SUBPLAN FILTER  |                       |1938     |9646000|
|1 | TABLE SCAN     |M(UNIQUE_CODE)         |1938     |7260012|
|2 | TABLE SCAN     |EC(UNI_ENTITY_CODE_02) |1        |137    |
|3 | SUBPLAN FILTER |                       |1        |274    |
|4 |  TABLE SCAN    |O(IND_IFORGANIZATION_1)|1        |229    |
|5 |  TABLE SCAN    |Z(IND_IFORGANIZATION_2)|4        |46     |
|6 | SUBPLAN FILTER |                       |1        |502    |
|7 |  TABLE SCAN    |O(IND_IFORGANIZATION_1)|1        |229    |
|8 |  SUBPLAN FILTER|                       |1        |274    |
|9 |   TABLE SCAN   |Z(IND_IFORGANIZATION_1)|1        |229    |
|10|   TABLE SCAN   |I(IND_IFORGANIZATION_2)|4        |46     |
|11| TABLE SCAN     |E(IDX_IFEMPLOYEE_01)   |1        |92     |
|12| TABLE SCAN     |E(UNI_ENTITY_CODE_01)  |1        |92     |
|13| TABLE SCAN     |C(UNI_ENTITY_CODE_01)  |1        |92     |
|14| TABLE SCAN     |J(UNI_ENTITY_CODE_01)  |1        |92     |
|15| TABLE SCAN     |U(UNI_ENTITY_CODE_01)  |1        |92     |
===============================================================

Outputs & filters: 
-------------------------------------
  0 - output([M.POLICY_CHARGE_ID], [M.POLICY_NO], [M.ENDORSE_NO], [?], [subquery(2)], [subquery(3)], [subquery(4)], [subquery(5)], [M.DATASOURCE], [M.PRODUCTGRP_CODE], [subquery(6)], [M.MID_CHANNELCODE], [M.INSURE_WAY], [M.AGENT_CODE], [M.AGENT_NAME], [M.THE4S_CODE], [subquery(7)], [M.INSURED_NAME], [M.APPLICANT_NAME], [M.START_DATE], [M.END_DATE], [M.ISSUE_DATE], [M.SUBPREMIUM], [M.LICENSENO], [subquery(8)], [M.VEHICLECLAIMTYPE], [M.ADDVALUETAX], [M.AMOUNT_TYPE_I], [M.AMOUNT_TYPE_II], [M.AMOUNT_TYPE_III], [M.AMOUNT_TYPE_IV], [M.AMOUNT_TYPE_V], [M.AMOUNT_OVERALL], [M.AMOUNT_OVERALL_TOTAL], [M.AMOUNT_OVERALL_BRANCH], [M.AMOUNT_OVERALL_DEPTGRP]), filter(nil), 
      exec_params_([M.DEPTGRP_CODE], [M.BRANCH_CODE], [M.DEPT_CODE], [M.DEPTGRP_CODE], [M.BRANCH_CODE], [M.HANDLER_CODE], [M.PRODUCTGRP_CODE], [M.CHANNELCODE], [M.THE4S_CODE], [M.USETYPE]), onetime_exprs_([subquery(1)]), init_plan_idxs_(nil)
  1 - output([M.CHANNELCODE], [M.INSURE_WAY], [M.BRANCH_CODE], [M.POLICY_CHARGE_ID], [M.POLICY_NO], [M.ENDORSE_NO], [M.DEPTGRP_CODE], [M.DEPT_CODE], [M.HANDLER_CODE], [M.PRODUCTGRP_CODE], [M.DATASOURCE], [M.MID_CHANNELCODE], [M.AGENT_CODE], [M.AGENT_NAME], [M.THE4S_CODE], [M.INSURED_NAME], [M.APPLICANT_NAME], [M.START_DATE], [M.END_DATE], [M.ISSUE_DATE], [M.SUBPREMIUM], [M.LICENSENO], [M.USETYPE], [M.VEHICLECLAIMTYPE], [M.ADDVALUETAX], [M.AMOUNT_TYPE_I], [M.AMOUNT_TYPE_II], [M.AMOUNT_TYPE_III], [M.AMOUNT_TYPE_IV], [M.AMOUNT_TYPE_V], [M.AMOUNT_OVERALL], [M.AMOUNT_OVERALL_TOTAL], [M.AMOUNT_OVERALL_BRANCH], [M.AMOUNT_OVERALL_DEPTGRP]), filter([M.BRANCH_CODE = ?], [M.LINE = ?], [M.CHANNELCODE IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)], [M.INSURE_WAY IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]), 
      access([M.LINE], [M.CHANNELCODE], [M.INSURE_WAY], [M.BRANCH_CODE], [M.POLICY_CHARGE_ID], [M.POLICY_NO], [M.ENDORSE_NO], [M.DEPTGRP_CODE], [M.DEPT_CODE], [M.HANDLER_CODE], [M.PRODUCTGRP_CODE], [M.DATASOURCE], [M.MID_CHANNELCODE], [M.AGENT_CODE], [M.AGENT_NAME], [M.THE4S_CODE], [M.INSURED_NAME], [M.APPLICANT_NAME], [M.START_DATE], [M.END_DATE], [M.ISSUE_DATE], [M.SUBPREMIUM], [M.LICENSENO], [M.USETYPE], [M.VEHICLECLAIMTYPE], [M.ADDVALUETAX], [M.AMOUNT_TYPE_I], [M.AMOUNT_TYPE_II], [M.AMOUNT_TYPE_III], [M.AMOUNT_TYPE_IV], [M.AMOUNT_TYPE_V], [M.AMOUNT_OVERALL], [M.AMOUNT_OVERALL_TOTAL], [M.AMOUNT_OVERALL_BRANCH], [M.AMOUNT_OVERALL_DEPTGRP]), partitions(p0), 
      limit(?), offset(nil)
  2 - output([EC.ENTITY_NAME]), filter([EC.ENTITY_CODE = ?]), 
      access([EC.ENTITY_CODE], [EC.ENTITY_NAME]), partitions(p0)
  3 - output([O.NAME]), filter(nil), 
      exec_params_(nil), onetime_exprs_([subquery(1)]), init_plan_idxs_(nil)
  4 - output([O.NAME]), filter([O.CODE = ?]), 
      access([O.CODE], [O.NAME]), partitions(p0)
  5 - output([Z.ORG_ID]), filter(nil), 
      access([Z.ORG_ID]), partitions(p0)
  6 - output([O.NAME]), filter(nil), 
      exec_params_(nil), onetime_exprs_([subquery(1)]), init_plan_idxs_(nil)
  7 - output([O.NAME]), filter([O.CODE = ?]), 
      access([O.CODE], [O.NAME]), partitions(p0)
  8 - output([Z.ORG_ID]), filter(nil), 
      exec_params_(nil), onetime_exprs_([subquery(1)]), init_plan_idxs_(nil)
  9 - output([Z.ORG_ID]), filter([Z.CODE = ?]), 
      access([Z.CODE], [Z.ORG_ID]), partitions(p0)
  10 - output([I.ORG_ID]), filter(nil), 
      access([I.ORG_ID]), partitions(p0)
  11 - output([E.NAME]), filter(nil), 
      access([E.NAME]), partitions(p0)
  12 - output([E.ENTITY_NAME]), filter([E.PARENT_CODE = ?]), 
      access([E.PARENT_CODE], [E.ENTITY_NAME]), partitions(p0)
  13 - output([C.ENTITY_NAME]), filter(nil), 
      access([C.ENTITY_NAME]), partitions(p0)
  14 - output([J.ENTITY_NAME]), filter(nil), 
      access([J.ENTITY_NAME]), partitions(p0)
  15 - output([U.ENTITY_NAME]), filter(nil), 
      access([U.ENTITY_NAME]), partitions(p0)

执行时间:

其实刚拿到SQL大致看了一遍就知道哪里慢(OB的执行计划其实我也看不懂),标量子查询过多导致的filter。

主表 CC_POLICY_CHARGE M 共430多万行数据,只取50W出来(ROWNUM <= 500000)。

在OB上跑要 3184S(50多分钟) 出结果,而在ORACLE 只需要 1010s 就能跑出结果,可见ORACLE的CBO优化器是多强大,太顶了。

 

像这种SQL要优化只能等价改写(把标量子查询改成 left join 干掉 filter),无其他办法:

等价改写SQL:

SELECT M.POLICY_CHARGE_ID       AS policyChargeId,
       M.POLICY_NO              AS policyNo,
       M.ENDORSE_NO             AS endorseNo,
       EC.entity_name           AS line,
       O1.name                  AS deptgrpCode,
       O2.name                  AS deptCode,
       E.name                   AS handlerCode,
       EC2.entity_name          AS productgrpName,
       M.DATASOURCE             AS DATASOURCE,
       M.PRODUCTGRP_CODE        AS productgrpCode,
       EC3.entity_name          AS channelcode,
       M.MID_CHANNELCODE        AS midChannelcode,
       M.INSURE_WAY             AS insureWay,
       M.AGENT_CODE             AS agentCode,
       M.AGENT_NAME             AS agentName,
       M.THE4S_CODE             AS the4sCode,
       EC4.entity_name          AS the4sName,
       M.INSURED_NAME           AS insuredName,
       M.APPLICANT_NAME         AS applicantName,
       M.START_DATE             AS startDate,
       M.END_DATE               AS endDate,
       M.ISSUE_DATE             AS issueDate,
       M.SUBPREMIUM             AS subpremium,
       M.LICENSENO              AS licenseno,
       EC5.entity_name          AS usetype,
       M.VEHICLECLAIMTYPE       AS vehicleclaimtype,
       M.ADDVALUETAX            AS addvaluetax,
       M.AMOUNT_TYPE_I          AS amountTypeI,
       M.AMOUNT_TYPE_II         AS amountTypeII,
       M.AMOUNT_TYPE_III        AS amountTypeIII,
       M.AMOUNT_TYPE_IV         AS amountTypeIV,
       M.AMOUNT_TYPE_V          AS amountTypeV,
       M.AMOUNT_OVERALL         AS amountOverall,
       M.AMOUNT_OVERALL_TOTAL   AS amountOverallTotal,
       M.AMOUNT_OVERALL_BRANCH  AS amountOverallBranch,
       M.AMOUNT_OVERALL_DEPTGRP AS amountOverallDeptgrp
FROM CC_POLICY_CHARGE M
         LEFT JOIN ENTITY_CODE EC ON EC.parent_code = 'BA36' AND EC.entity_code = M.line
         LEFT JOIN iforganization O1 ON O1.code = M.DEPTGRP_CODE
         LEFT JOIN iforganization O1_PARENT ON O1_PARENT.code = M.BRANCH_CODE AND O1_PARENT.org_id = O1.parent_id
         LEFT JOIN iforganization O2 ON O2.code = M.DEPT_CODE
         LEFT JOIN iforganization O2_PARENT ON O2_PARENT.code = M.DEPTGRP_CODE AND O2_PARENT.org_id = O2.parent_id
         LEFT JOIN iforganization O2_GRANDPARENT
                   ON O2_GRANDPARENT.code = M.BRANCH_CODE AND O2_GRANDPARENT.org_id = O2_PARENT.parent_id
         LEFT JOIN ifemployee E ON E.code = M.HANDLER_CODE AND E.unit_code = M.Branch_Code
         LEFT JOIN entity_code EC2
                   ON EC2.entity_code = M.PRODUCTGRP_CODE AND EC2.top_code = 'BA10' AND EC2.parent_code = '1'
         LEFT JOIN entity_code EC3 ON EC3.top_code = 'BA53' AND EC3.entity_code = M.CHANNELCODE
         LEFT JOIN entity_code EC4 ON EC4.top_code = 'BA29' AND EC4.entity_code = M.THE4S_CODE
         LEFT JOIN entity_code EC5 ON EC5.top_code = 'BA28' AND EC5.entity_code = M.USETYPE
WHERE 1 = 1
  AND M.UNIQUE_CODE LIKE '3010100%'
  AND M.LINE = '1'
  AND M.CHANNELCODE IN ('C001', 'C002', 'C003', 'C004', 'C005', 'C006', 'C007',
                        'C008','C009','C010','CAND','C012','C013','C014','C015')
  AND M.INSURE_WAY IN ('11','12','14','16','17','18','21',
                       '22','23','25','27','28','29','31','32','33','36','37','38','39','40',
                       '19','41','42','43','44','45','46','47','51')
  AND M.BRANCH_CODE = '3010100'
  AND ROWNUM <= 500000;

改写后的执行计划:

=============================================================================================
|ID|OPERATOR                         |NAME                                |EST. ROWS|COST   |
---------------------------------------------------------------------------------------------
|0 |LIMIT                            |                                    |34690    |7739035|
|1 | MERGE OUTER JOIN                |                                    |34690    |7738513|
|2 |  HASH RIGHT OUTER JOIN          |                                    |34690    |7737851|
|3 |   TABLE SCAN                    |EC2(UNI_ENTITY_CODE_02)             |1        |183    |
|4 |   HASH RIGHT OUTER JOIN         |                                    |34690    |7715121|
|5 |    TABLE SCAN                   |EC3(INDEX_ENTITY_TOPCODE)           |16       |183    |
|6 |    HASH RIGHT OUTER JOIN        |                                    |34690    |7684751|
|7 |     TABLE SCAN                  |EC5(INDEX_ENTITY_TOPCODE)           |32       |184    |
|8 |     HASH RIGHT OUTER JOIN       |                                    |34690    |7654365|
|9 |      TABLE SCAN                 |EC4(INDEX_ENTITY_TOPCODE)           |2        |137    |
|10|      HASH RIGHT OUTER JOIN      |                                    |34690    |7631719|
|11|       TABLE SCAN                |O2_GRANDPARENT(IND_IFORGANIZATION_2)|1        |46     |
|12|       HASH RIGHT OUTER JOIN     |                                    |34690    |7608424|
|13|        TABLE SCAN               |O1_PARENT(IND_IFORGANIZATION_2)     |1        |46     |
|14|        HASH RIGHT OUTER JOIN    |                                    |34690    |7585128|
|15|         TABLE SCAN              |O2_PARENT                           |65935    |25504  |
|16|         HASH OUTER JOIN         |                                    |34690    |7482018|
|17|          HASH OUTER JOIN        |                                    |9764     |7387204|
|18|           NESTED-LOOP OUTER JOIN|                                    |2748     |7311954|
|19|            SUBPLAN SCAN         |VIEW2                               |1938     |7260041|
|20|             TABLE SCAN          |M(UNIQUE_CODE)                      |1938     |7260012|
|21|            TABLE SCAN           |E(IDX_IFEMPLOYEE_01)                |1        |26     |
|22|           TABLE SCAN            |O1                                  |65935    |25504  |
|23|          TABLE SCAN             |O2                                  |65935    |25504  |
|24|  TABLE SCAN                     |EC(UNI_ENTITY_CODE_02)              |1        |137    |
=============================================================================================

Outputs & filters: 
-------------------------------------
  0 - output([VIEW2.M.POLICY_CHARGE_ID], [VIEW2.M.POLICY_NO], [VIEW2.M.ENDORSE_NO], [EC.ENTITY_NAME], [O1.NAME], [O2.NAME], [E.NAME], [EC2.ENTITY_NAME], [VIEW2.M.DATASOURCE], [VIEW2.M.PRODUCTGRP_CODE], [EC3.ENTITY_NAME], [VIEW2.M.MID_CHANNELCODE], [VIEW2.M.INSURE_WAY], [VIEW2.M.AGENT_CODE], [VIEW2.M.AGENT_NAME], [VIEW2.M.THE4S_CODE], [EC4.ENTITY_NAME], [VIEW2.M.INSURED_NAME], [VIEW2.M.APPLICANT_NAME], [VIEW2.M.START_DATE], [VIEW2.M.END_DATE], [VIEW2.M.ISSUE_DATE], [VIEW2.M.SUBPREMIUM], [VIEW2.M.LICENSENO], [EC5.ENTITY_NAME], [VIEW2.M.VEHICLECLAIMTYPE], [VIEW2.M.ADDVALUETAX], [VIEW2.M.AMOUNT_TYPE_I], [VIEW2.M.AMOUNT_TYPE_II], [VIEW2.M.AMOUNT_TYPE_III], [VIEW2.M.AMOUNT_TYPE_IV], [VIEW2.M.AMOUNT_TYPE_V], [VIEW2.M.AMOUNT_OVERALL], [VIEW2.M.AMOUNT_OVERALL_TOTAL], [VIEW2.M.AMOUNT_OVERALL_BRANCH], [VIEW2.M.AMOUNT_OVERALL_DEPTGRP]), filter(nil), limit(?), offset(nil)
  1 - output([VIEW2.M.POLICY_CHARGE_ID], [VIEW2.M.POLICY_NO], [VIEW2.M.ENDORSE_NO], [EC.ENTITY_NAME], [O1.NAME], [O2.NAME], [E.NAME], [EC2.ENTITY_NAME], [VIEW2.M.DATASOURCE], [VIEW2.M.PRODUCTGRP_CODE], [EC3.ENTITY_NAME], [VIEW2.M.MID_CHANNELCODE], [VIEW2.M.INSURE_WAY], [VIEW2.M.AGENT_CODE], [VIEW2.M.AGENT_NAME], [VIEW2.M.THE4S_CODE], [EC4.ENTITY_NAME], [VIEW2.M.INSURED_NAME], [VIEW2.M.APPLICANT_NAME], [VIEW2.M.START_DATE], [VIEW2.M.END_DATE], [VIEW2.M.ISSUE_DATE], [VIEW2.M.SUBPREMIUM], [VIEW2.M.LICENSENO], [EC5.ENTITY_NAME], [VIEW2.M.VEHICLECLAIMTYPE], [VIEW2.M.ADDVALUETAX], [VIEW2.M.AMOUNT_TYPE_I], [VIEW2.M.AMOUNT_TYPE_II], [VIEW2.M.AMOUNT_TYPE_III], [VIEW2.M.AMOUNT_TYPE_IV], [VIEW2.M.AMOUNT_TYPE_V], [VIEW2.M.AMOUNT_OVERALL], [VIEW2.M.AMOUNT_OVERALL_TOTAL], [VIEW2.M.AMOUNT_OVERALL_BRANCH], [VIEW2.M.AMOUNT_OVERALL_DEPTGRP]), filter(nil), 
      equal_conds([EC.ENTITY_CODE = VIEW2.M.LINE]), other_conds(nil)
  2 - output([VIEW2.M.POLICY_CHARGE_ID], [VIEW2.M.POLICY_NO], [VIEW2.M.ENDORSE_NO], [O1.NAME], [O2.NAME], [E.NAME], [EC2.ENTITY_NAME], [VIEW2.M.DATASOURCE], [VIEW2.M.PRODUCTGRP_CODE], [EC3.ENTITY_NAME], [VIEW2.M.MID_CHANNELCODE], [VIEW2.M.INSURE_WAY], [VIEW2.M.AGENT_CODE], [VIEW2.M.AGENT_NAME], [VIEW2.M.THE4S_CODE], [EC4.ENTITY_NAME], [VIEW2.M.INSURED_NAME], [VIEW2.M.APPLICANT_NAME], [VIEW2.M.START_DATE], [VIEW2.M.END_DATE], [VIEW2.M.ISSUE_DATE], [VIEW2.M.SUBPREMIUM], [VIEW2.M.LICENSENO], [EC5.ENTITY_NAME], [VIEW2.M.VEHICLECLAIMTYPE], [VIEW2.M.ADDVALUETAX], [VIEW2.M.AMOUNT_TYPE_I], [VIEW2.M.AMOUNT_TYPE_II], [VIEW2.M.AMOUNT_TYPE_III], [VIEW2.M.AMOUNT_TYPE_IV], [VIEW2.M.AMOUNT_TYPE_V], [VIEW2.M.AMOUNT_OVERALL], [VIEW2.M.AMOUNT_OVERALL_TOTAL], [VIEW2.M.AMOUNT_OVERALL_BRANCH], [VIEW2.M.AMOUNT_OVERALL_DEPTGRP], [VIEW2.M.LINE]), filter(nil), 
      equal_conds([EC2.ENTITY_CODE = VIEW2.M.PRODUCTGRP_CODE]), other_conds(nil)
  3 - output([EC2.ENTITY_CODE], [EC2.ENTITY_NAME]), filter([EC2.TOP_CODE = ?]), 
      access([EC2.ENTITY_CODE], [EC2.TOP_CODE], [EC2.ENTITY_NAME]), partitions(p0)
  4 - output([VIEW2.M.POLICY_CHARGE_ID], [VIEW2.M.POLICY_NO], [VIEW2.M.ENDORSE_NO], [O1.NAME], [O2.NAME], [E.NAME], [VIEW2.M.DATASOURCE], [VIEW2.M.PRODUCTGRP_CODE], [EC3.ENTITY_NAME], [VIEW2.M.MID_CHANNELCODE], [VIEW2.M.INSURE_WAY], [VIEW2.M.AGENT_CODE], [VIEW2.M.AGENT_NAME], [VIEW2.M.THE4S_CODE], [EC4.ENTITY_NAME], [VIEW2.M.INSURED_NAME], [VIEW2.M.APPLICANT_NAME], [VIEW2.M.START_DATE], [VIEW2.M.END_DATE], [VIEW2.M.ISSUE_DATE], [VIEW2.M.SUBPREMIUM], [VIEW2.M.LICENSENO], [EC5.ENTITY_NAME], [VIEW2.M.VEHICLECLAIMTYPE], [VIEW2.M.ADDVALUETAX], [VIEW2.M.AMOUNT_TYPE_I], [VIEW2.M.AMOUNT_TYPE_II], [VIEW2.M.AMOUNT_TYPE_III], [VIEW2.M.AMOUNT_TYPE_IV], [VIEW2.M.AMOUNT_TYPE_V], [VIEW2.M.AMOUNT_OVERALL], [VIEW2.M.AMOUNT_OVERALL_TOTAL], [VIEW2.M.AMOUNT_OVERALL_BRANCH], [VIEW2.M.AMOUNT_OVERALL_DEPTGRP], [VIEW2.M.LINE]), filter(nil), 
      equal_conds([EC3.ENTITY_CODE = VIEW2.M.CHANNELCODE]), other_conds(nil)
  5 - output([EC3.ENTITY_CODE], [EC3.ENTITY_NAME]), filter(nil), 
      access([EC3.ENTITY_CODE], [EC3.ENTITY_NAME]), partitions(p0)
  6 - output([VIEW2.M.POLICY_CHARGE_ID], [VIEW2.M.POLICY_NO], [VIEW2.M.ENDORSE_NO], [O1.NAME], [O2.NAME], [E.NAME], [VIEW2.M.DATASOURCE], [VIEW2.M.PRODUCTGRP_CODE], [VIEW2.M.MID_CHANNELCODE], [VIEW2.M.INSURE_WAY], [VIEW2.M.AGENT_CODE], [VIEW2.M.AGENT_NAME], [VIEW2.M.THE4S_CODE], [EC4.ENTITY_NAME], [VIEW2.M.INSURED_NAME], [VIEW2.M.APPLICANT_NAME], [VIEW2.M.START_DATE], [VIEW2.M.END_DATE], [VIEW2.M.ISSUE_DATE], [VIEW2.M.SUBPREMIUM], [VIEW2.M.LICENSENO], [EC5.ENTITY_NAME], [VIEW2.M.VEHICLECLAIMTYPE], [VIEW2.M.ADDVALUETAX], [VIEW2.M.AMOUNT_TYPE_I], [VIEW2.M.AMOUNT_TYPE_II], [VIEW2.M.AMOUNT_TYPE_III], [VIEW2.M.AMOUNT_TYPE_IV], [VIEW2.M.AMOUNT_TYPE_V], [VIEW2.M.AMOUNT_OVERALL], [VIEW2.M.AMOUNT_OVERALL_TOTAL], [VIEW2.M.AMOUNT_OVERALL_BRANCH], [VIEW2.M.AMOUNT_OVERALL_DEPTGRP], [VIEW2.M.LINE], [VIEW2.M.CHANNELCODE]), filter(nil), 
      equal_conds([EC5.ENTITY_CODE = VIEW2.M.USETYPE]), other_conds(nil)
  7 - output([EC5.ENTITY_CODE], [EC5.ENTITY_NAME]), filter(nil), 
      access([EC5.ENTITY_CODE], [EC5.ENTITY_NAME]), partitions(p0)
  8 - output([VIEW2.M.POLICY_CHARGE_ID], [VIEW2.M.POLICY_NO], [VIEW2.M.ENDORSE_NO], [O1.NAME], [O2.NAME], [E.NAME], [VIEW2.M.DATASOURCE], [VIEW2.M.PRODUCTGRP_CODE], [VIEW2.M.MID_CHANNELCODE], [VIEW2.M.INSURE_WAY], [VIEW2.M.AGENT_CODE], [VIEW2.M.AGENT_NAME], [VIEW2.M.THE4S_CODE], [EC4.ENTITY_NAME], [VIEW2.M.INSURED_NAME], [VIEW2.M.APPLICANT_NAME], [VIEW2.M.START_DATE], [VIEW2.M.END_DATE], [VIEW2.M.ISSUE_DATE], [VIEW2.M.SUBPREMIUM], [VIEW2.M.LICENSENO], [VIEW2.M.VEHICLECLAIMTYPE], [VIEW2.M.ADDVALUETAX], [VIEW2.M.AMOUNT_TYPE_I], [VIEW2.M.AMOUNT_TYPE_II], [VIEW2.M.AMOUNT_TYPE_III], [VIEW2.M.AMOUNT_TYPE_IV], [VIEW2.M.AMOUNT_TYPE_V], [VIEW2.M.AMOUNT_OVERALL], [VIEW2.M.AMOUNT_OVERALL_TOTAL], [VIEW2.M.AMOUNT_OVERALL_BRANCH], [VIEW2.M.AMOUNT_OVERALL_DEPTGRP], [VIEW2.M.LINE], [VIEW2.M.CHANNELCODE], [VIEW2.M.USETYPE]), filter(nil), 
      equal_conds([EC4.ENTITY_CODE = VIEW2.M.THE4S_CODE]), other_conds(nil)
  9 - output([EC4.ENTITY_CODE], [EC4.ENTITY_NAME]), filter(nil), 
      access([EC4.ENTITY_CODE], [EC4.ENTITY_NAME]), partitions(p0)
  10 - output([VIEW2.M.POLICY_CHARGE_ID], [VIEW2.M.POLICY_NO], [VIEW2.M.ENDORSE_NO], [O1.NAME], [O2.NAME], [E.NAME], [VIEW2.M.DATASOURCE], [VIEW2.M.PRODUCTGRP_CODE], [VIEW2.M.MID_CHANNELCODE], [VIEW2.M.INSURE_WAY], [VIEW2.M.AGENT_CODE], [VIEW2.M.AGENT_NAME], [VIEW2.M.THE4S_CODE], [VIEW2.M.INSURED_NAME], [VIEW2.M.APPLICANT_NAME], [VIEW2.M.START_DATE], [VIEW2.M.END_DATE], [VIEW2.M.ISSUE_DATE], [VIEW2.M.SUBPREMIUM], [VIEW2.M.LICENSENO], [VIEW2.M.VEHICLECLAIMTYPE], [VIEW2.M.ADDVALUETAX], [VIEW2.M.AMOUNT_TYPE_I], [VIEW2.M.AMOUNT_TYPE_II], [VIEW2.M.AMOUNT_TYPE_III], [VIEW2.M.AMOUNT_TYPE_IV], [VIEW2.M.AMOUNT_TYPE_V], [VIEW2.M.AMOUNT_OVERALL], [VIEW2.M.AMOUNT_OVERALL_TOTAL], [VIEW2.M.AMOUNT_OVERALL_BRANCH], [VIEW2.M.AMOUNT_OVERALL_DEPTGRP], [VIEW2.M.LINE], [VIEW2.M.CHANNELCODE], [VIEW2.M.USETYPE]), filter(nil), 
      equal_conds([O2_GRANDPARENT.CODE = VIEW2.M.BRANCH_CODE], [O2_GRANDPARENT.ORG_ID = O2_PARENT.PARENT_ID]), other_conds(nil)
  11 - output([O2_GRANDPARENT.CODE], [O2_GRANDPARENT.ORG_ID]), filter(nil), 
      access([O2_GRANDPARENT.CODE], [O2_GRANDPARENT.ORG_ID]), partitions(p0)
  12 - output([VIEW2.M.POLICY_CHARGE_ID], [VIEW2.M.POLICY_NO], [VIEW2.M.ENDORSE_NO], [O1.NAME], [O2.NAME], [E.NAME], [VIEW2.M.DATASOURCE], [VIEW2.M.PRODUCTGRP_CODE], [VIEW2.M.MID_CHANNELCODE], [VIEW2.M.INSURE_WAY], [VIEW2.M.AGENT_CODE], [VIEW2.M.AGENT_NAME], [VIEW2.M.THE4S_CODE], [VIEW2.M.INSURED_NAME], [VIEW2.M.APPLICANT_NAME], [VIEW2.M.START_DATE], [VIEW2.M.END_DATE], [VIEW2.M.ISSUE_DATE], [VIEW2.M.SUBPREMIUM], [VIEW2.M.LICENSENO], [VIEW2.M.VEHICLECLAIMTYPE], [VIEW2.M.ADDVALUETAX], [VIEW2.M.AMOUNT_TYPE_I], [VIEW2.M.AMOUNT_TYPE_II], [VIEW2.M.AMOUNT_TYPE_III], [VIEW2.M.AMOUNT_TYPE_IV], [VIEW2.M.AMOUNT_TYPE_V], [VIEW2.M.AMOUNT_OVERALL], [VIEW2.M.AMOUNT_OVERALL_TOTAL], [VIEW2.M.AMOUNT_OVERALL_BRANCH], [VIEW2.M.AMOUNT_OVERALL_DEPTGRP], [VIEW2.M.LINE], [VIEW2.M.CHANNELCODE], [VIEW2.M.USETYPE], [VIEW2.M.BRANCH_CODE], [O2_PARENT.PARENT_ID]), filter(nil), 
      equal_conds([O1_PARENT.CODE = VIEW2.M.BRANCH_CODE], [O1_PARENT.ORG_ID = O1.PARENT_ID]), other_conds(nil)
  13 - output([O1_PARENT.CODE], [O1_PARENT.ORG_ID]), filter(nil), 
      access([O1_PARENT.CODE], [O1_PARENT.ORG_ID]), partitions(p0)
  14 - output([VIEW2.M.POLICY_CHARGE_ID], [VIEW2.M.POLICY_NO], [VIEW2.M.ENDORSE_NO], [O1.NAME], [O2.NAME], [E.NAME], [VIEW2.M.DATASOURCE], [VIEW2.M.PRODUCTGRP_CODE], [VIEW2.M.MID_CHANNELCODE], [VIEW2.M.INSURE_WAY], [VIEW2.M.AGENT_CODE], [VIEW2.M.AGENT_NAME], [VIEW2.M.THE4S_CODE], [VIEW2.M.INSURED_NAME], [VIEW2.M.APPLICANT_NAME], [VIEW2.M.START_DATE], [VIEW2.M.END_DATE], [VIEW2.M.ISSUE_DATE], [VIEW2.M.SUBPREMIUM], [VIEW2.M.LICENSENO], [VIEW2.M.VEHICLECLAIMTYPE], [VIEW2.M.ADDVALUETAX], [VIEW2.M.AMOUNT_TYPE_I], [VIEW2.M.AMOUNT_TYPE_II], [VIEW2.M.AMOUNT_TYPE_III], [VIEW2.M.AMOUNT_TYPE_IV], [VIEW2.M.AMOUNT_TYPE_V], [VIEW2.M.AMOUNT_OVERALL], [VIEW2.M.AMOUNT_OVERALL_TOTAL], [VIEW2.M.AMOUNT_OVERALL_BRANCH], [VIEW2.M.AMOUNT_OVERALL_DEPTGRP], [VIEW2.M.LINE], [VIEW2.M.CHANNELCODE], [VIEW2.M.USETYPE], [VIEW2.M.BRANCH_CODE], [O2_PARENT.PARENT_ID], [O1.PARENT_ID]), filter(nil), 
      equal_conds([O2_PARENT.CODE = VIEW2.M.DEPTGRP_CODE], [O2_PARENT.ORG_ID = O2.PARENT_ID]), other_conds(nil)
  15 - output([O2_PARENT.CODE], [O2_PARENT.ORG_ID], [O2_PARENT.PARENT_ID]), filter(nil), 
      access([O2_PARENT.CODE], [O2_PARENT.ORG_ID], [O2_PARENT.PARENT_ID]), partitions(p0)
  16 - output([VIEW2.M.POLICY_CHARGE_ID], [VIEW2.M.POLICY_NO], [VIEW2.M.ENDORSE_NO], [O1.NAME], [O2.NAME], [E.NAME], [VIEW2.M.DATASOURCE], [VIEW2.M.PRODUCTGRP_CODE], [VIEW2.M.MID_CHANNELCODE], [VIEW2.M.INSURE_WAY], [VIEW2.M.AGENT_CODE], [VIEW2.M.AGENT_NAME], [VIEW2.M.THE4S_CODE], [VIEW2.M.INSURED_NAME], [VIEW2.M.APPLICANT_NAME], [VIEW2.M.START_DATE], [VIEW2.M.END_DATE], [VIEW2.M.ISSUE_DATE], [VIEW2.M.SUBPREMIUM], [VIEW2.M.LICENSENO], [VIEW2.M.VEHICLECLAIMTYPE], [VIEW2.M.ADDVALUETAX], [VIEW2.M.AMOUNT_TYPE_I], [VIEW2.M.AMOUNT_TYPE_II], [VIEW2.M.AMOUNT_TYPE_III], [VIEW2.M.AMOUNT_TYPE_IV], [VIEW2.M.AMOUNT_TYPE_V], [VIEW2.M.AMOUNT_OVERALL], [VIEW2.M.AMOUNT_OVERALL_TOTAL], [VIEW2.M.AMOUNT_OVERALL_BRANCH], [VIEW2.M.AMOUNT_OVERALL_DEPTGRP], [VIEW2.M.LINE], [VIEW2.M.CHANNELCODE], [VIEW2.M.USETYPE], [VIEW2.M.BRANCH_CODE], [O1.PARENT_ID], [VIEW2.M.DEPTGRP_CODE], [O2.PARENT_ID]), filter(nil), 
      equal_conds([O2.CODE = VIEW2.M.DEPT_CODE]), other_conds(nil)
  17 - output([VIEW2.M.POLICY_CHARGE_ID], [VIEW2.M.POLICY_NO], [VIEW2.M.ENDORSE_NO], [O1.NAME], [E.NAME], [VIEW2.M.DATASOURCE], [VIEW2.M.PRODUCTGRP_CODE], [VIEW2.M.MID_CHANNELCODE], [VIEW2.M.INSURE_WAY], [VIEW2.M.AGENT_CODE], [VIEW2.M.AGENT_NAME], [VIEW2.M.THE4S_CODE], [VIEW2.M.INSURED_NAME], [VIEW2.M.APPLICANT_NAME], [VIEW2.M.START_DATE], [VIEW2.M.END_DATE], [VIEW2.M.ISSUE_DATE], [VIEW2.M.SUBPREMIUM], [VIEW2.M.LICENSENO], [VIEW2.M.VEHICLECLAIMTYPE], [VIEW2.M.ADDVALUETAX], [VIEW2.M.AMOUNT_TYPE_I], [VIEW2.M.AMOUNT_TYPE_II], [VIEW2.M.AMOUNT_TYPE_III], [VIEW2.M.AMOUNT_TYPE_IV], [VIEW2.M.AMOUNT_TYPE_V], [VIEW2.M.AMOUNT_OVERALL], [VIEW2.M.AMOUNT_OVERALL_TOTAL], [VIEW2.M.AMOUNT_OVERALL_BRANCH], [VIEW2.M.AMOUNT_OVERALL_DEPTGRP], [VIEW2.M.LINE], [VIEW2.M.CHANNELCODE], [VIEW2.M.USETYPE], [VIEW2.M.BRANCH_CODE], [O1.PARENT_ID], [VIEW2.M.DEPTGRP_CODE], [VIEW2.M.DEPT_CODE]), filter(nil), 
      equal_conds([O1.CODE = VIEW2.M.DEPTGRP_CODE]), other_conds(nil)
  18 - output([VIEW2.M.POLICY_CHARGE_ID], [VIEW2.M.POLICY_NO], [VIEW2.M.ENDORSE_NO], [E.NAME], [VIEW2.M.DATASOURCE], [VIEW2.M.PRODUCTGRP_CODE], [VIEW2.M.MID_CHANNELCODE], [VIEW2.M.INSURE_WAY], [VIEW2.M.AGENT_CODE], [VIEW2.M.AGENT_NAME], [VIEW2.M.THE4S_CODE], [VIEW2.M.INSURED_NAME], [VIEW2.M.APPLICANT_NAME], [VIEW2.M.START_DATE], [VIEW2.M.END_DATE], [VIEW2.M.ISSUE_DATE], [VIEW2.M.SUBPREMIUM], [VIEW2.M.LICENSENO], [VIEW2.M.VEHICLECLAIMTYPE], [VIEW2.M.ADDVALUETAX], [VIEW2.M.AMOUNT_TYPE_I], [VIEW2.M.AMOUNT_TYPE_II], [VIEW2.M.AMOUNT_TYPE_III], [VIEW2.M.AMOUNT_TYPE_IV], [VIEW2.M.AMOUNT_TYPE_V], [VIEW2.M.AMOUNT_OVERALL], [VIEW2.M.AMOUNT_OVERALL_TOTAL], [VIEW2.M.AMOUNT_OVERALL_BRANCH], [VIEW2.M.AMOUNT_OVERALL_DEPTGRP], [VIEW2.M.LINE], [VIEW2.M.CHANNELCODE], [VIEW2.M.USETYPE], [VIEW2.M.BRANCH_CODE], [VIEW2.M.DEPTGRP_CODE], [VIEW2.M.DEPT_CODE]), filter(nil), 
      conds(nil), nl_params_([VIEW2.M.HANDLER_CODE], [VIEW2.M.BRANCH_CODE])
  19 - output([VIEW2.M.LINE], [VIEW2.M.DEPTGRP_CODE], [VIEW2.M.BRANCH_CODE], [VIEW2.M.DEPT_CODE], [VIEW2.M.HANDLER_CODE], [VIEW2.M.PRODUCTGRP_CODE], [VIEW2.M.CHANNELCODE], [VIEW2.M.THE4S_CODE], [VIEW2.M.USETYPE], [VIEW2.M.INSURE_WAY], [VIEW2.M.POLICY_CHARGE_ID], [VIEW2.M.POLICY_NO], [VIEW2.M.ENDORSE_NO], [VIEW2.M.DATASOURCE], [VIEW2.M.MID_CHANNELCODE], [VIEW2.M.AGENT_CODE], [VIEW2.M.AGENT_NAME], [VIEW2.M.INSURED_NAME], [VIEW2.M.APPLICANT_NAME], [VIEW2.M.START_DATE], [VIEW2.M.END_DATE], [VIEW2.M.ISSUE_DATE], [VIEW2.M.SUBPREMIUM], [VIEW2.M.LICENSENO], [VIEW2.M.VEHICLECLAIMTYPE], [VIEW2.M.ADDVALUETAX], [VIEW2.M.AMOUNT_TYPE_I], [VIEW2.M.AMOUNT_TYPE_II], [VIEW2.M.AMOUNT_TYPE_III], [VIEW2.M.AMOUNT_TYPE_IV], [VIEW2.M.AMOUNT_TYPE_V], [VIEW2.M.AMOUNT_OVERALL], [VIEW2.M.AMOUNT_OVERALL_TOTAL], [VIEW2.M.AMOUNT_OVERALL_BRANCH], [VIEW2.M.AMOUNT_OVERALL_DEPTGRP]), filter(nil), 
      access([VIEW2.M.LINE], [VIEW2.M.DEPTGRP_CODE], [VIEW2.M.BRANCH_CODE], [VIEW2.M.DEPT_CODE], [VIEW2.M.HANDLER_CODE], [VIEW2.M.PRODUCTGRP_CODE], [VIEW2.M.CHANNELCODE], [VIEW2.M.THE4S_CODE], [VIEW2.M.USETYPE], [VIEW2.M.INSURE_WAY], [VIEW2.M.POLICY_CHARGE_ID], [VIEW2.M.POLICY_NO], [VIEW2.M.ENDORSE_NO], [VIEW2.M.DATASOURCE], [VIEW2.M.MID_CHANNELCODE], [VIEW2.M.AGENT_CODE], [VIEW2.M.AGENT_NAME], [VIEW2.M.INSURED_NAME], [VIEW2.M.APPLICANT_NAME], [VIEW2.M.START_DATE], [VIEW2.M.END_DATE], [VIEW2.M.ISSUE_DATE], [VIEW2.M.SUBPREMIUM], [VIEW2.M.LICENSENO], [VIEW2.M.VEHICLECLAIMTYPE], [VIEW2.M.ADDVALUETAX], [VIEW2.M.AMOUNT_TYPE_I], [VIEW2.M.AMOUNT_TYPE_II], [VIEW2.M.AMOUNT_TYPE_III], [VIEW2.M.AMOUNT_TYPE_IV], [VIEW2.M.AMOUNT_TYPE_V], [VIEW2.M.AMOUNT_OVERALL], [VIEW2.M.AMOUNT_OVERALL_TOTAL], [VIEW2.M.AMOUNT_OVERALL_BRANCH], [VIEW2.M.AMOUNT_OVERALL_DEPTGRP])
  20 - output([M.LINE], [M.DEPTGRP_CODE], [M.BRANCH_CODE], [M.DEPT_CODE], [M.HANDLER_CODE], [M.PRODUCTGRP_CODE], [M.CHANNELCODE], [M.THE4S_CODE], [M.USETYPE], [M.INSURE_WAY], [M.POLICY_CHARGE_ID], [M.POLICY_NO], [M.ENDORSE_NO], [M.DATASOURCE], [M.MID_CHANNELCODE], [M.AGENT_CODE], [M.AGENT_NAME], [M.INSURED_NAME], [M.APPLICANT_NAME], [M.START_DATE], [M.END_DATE], [M.ISSUE_DATE], [M.SUBPREMIUM], [M.LICENSENO], [M.VEHICLECLAIMTYPE], [M.ADDVALUETAX], [M.AMOUNT_TYPE_I], [M.AMOUNT_TYPE_II], [M.AMOUNT_TYPE_III], [M.AMOUNT_TYPE_IV], [M.AMOUNT_TYPE_V], [M.AMOUNT_OVERALL], [M.AMOUNT_OVERALL_TOTAL], [M.AMOUNT_OVERALL_BRANCH], [M.AMOUNT_OVERALL_DEPTGRP]), filter([M.BRANCH_CODE = ?], [M.LINE = ?], [M.CHANNELCODE IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)], [M.INSURE_WAY IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]), 
      access([M.LINE], [M.DEPTGRP_CODE], [M.BRANCH_CODE], [M.DEPT_CODE], [M.HANDLER_CODE], [M.PRODUCTGRP_CODE], [M.CHANNELCODE], [M.THE4S_CODE], [M.USETYPE], [M.INSURE_WAY], [M.POLICY_CHARGE_ID], [M.POLICY_NO], [M.ENDORSE_NO], [M.DATASOURCE], [M.MID_CHANNELCODE], [M.AGENT_CODE], [M.AGENT_NAME], [M.INSURED_NAME], [M.APPLICANT_NAME], [M.START_DATE], [M.END_DATE], [M.ISSUE_DATE], [M.SUBPREMIUM], [M.LICENSENO], [M.VEHICLECLAIMTYPE], [M.ADDVALUETAX], [M.AMOUNT_TYPE_I], [M.AMOUNT_TYPE_II], [M.AMOUNT_TYPE_III], [M.AMOUNT_TYPE_IV], [M.AMOUNT_TYPE_V], [M.AMOUNT_OVERALL], [M.AMOUNT_OVERALL_TOTAL], [M.AMOUNT_OVERALL_BRANCH], [M.AMOUNT_OVERALL_DEPTGRP]), partitions(p0), 
      limit(?), offset(nil)
  21 - output([E.NAME]), filter(nil), 
      access([E.NAME]), partitions(p0)
  22 - output([O1.CODE], [O1.PARENT_ID], [O1.NAME]), filter(nil), 
      access([O1.CODE], [O1.PARENT_ID], [O1.NAME]), partitions(p0)
  23 - output([O2.CODE], [O2.PARENT_ID], [O2.NAME]), filter(nil), 
      access([O2.CODE], [O2.PARENT_ID], [O2.NAME]), partitions(p0)
  24 - output([EC.ENTITY_CODE], [EC.ENTITY_NAME]), filter([EC.ENTITY_CODE = ?]), 
      access([EC.ENTITY_CODE], [EC.ENTITY_NAME]), partitions(p0)

 

可以看到改写完后,原来执行计划 SUBPLAN FILTER 已经变成了 HASH RIGHT OUTER JOIN,而执行时间也从原来的 3184s 变成了 10.91s,直接起飞。

 

总结:近两年感觉国产数据库市场份额越来越高了,笔者SQL优化的案例更多得也是从ORACLE、MySQL变成了OB、金仓数据库,

         建议大家还是要好好深入学习下国产数据库(特别是金仓数据库,国产之光),免得35岁被优化了找不到工作 。