某系统巡检,发现TOPSQL里面第一条SQL语句的执行时间相当不合理~

select (select EC_CUST_NOfrom GYL.FAAAAASM cuswhere cus.refcode = a.SELLER_REFCODE) EC_CUST_NO,BUSSTYPE,sum(LOANAMT) SUMLOANAMT,sum(OTSTAMT) SUMOTSTAMT,sum(YPOTSTAMT) SUMYPOTSTAMT,sum(YXCK) SUMYXCK,sum(STARTAMT) SUMSTARTAMT,sum(MARGINAAMT) SUMMARGINAAMTfrom (select casewhen typ.FACTSTATUS in ('P', 'G') thenbuyer.BCHIDelseseller.BCHIDend BCHID,casewhen typ.FACTSTATUS in ('P', 'G') thenbuyer.REFCODEelseseller.REFCODEend SELLER_REFCODE,casewhen typ.FACTSTATUS in ('P', 'G') thenbuyerbch.BCHDESCelsesellerbch.BCHDESCend BCHDESC,casewhen typ.FACTSTATUS in ('P', 'G') thenbuyerfbch.BCHDESCelsesellerfbch.BCHDESCend FBCHDESC,bus.BUSSTYPE,nvl(casewhen (mas.LOANDATE >= To_date('20180916', 'YYYY-mm-dd') andmas.LOANDATE <= To_date('20180916', 'YYYY-mm-dd')) thenmas.LOANAMTelse0end,0) LOANAMT,casewhen mas.loanflag = '2' thenmas.OTSTAMTelse0end OTSTAMT,casewhen mas.loanflag = '1' thenmas.OTSTAMTelse0end YPOTSTAMT,nvl((casewhen (mas.OTSTAMT - nvl(gur.MARGINAAMT, 0)) < 0 then0else(mas.OTSTAMT - nvl(gur.MARGINAAMT, 0))end),0) YXCK,(select nvl(sum(nvl(dbam.DBALOANAMT, 0)), 0)from GYL.FAAAAAAM dbam --14Wwhere dbam.APLREFCODE = mas.APPREFCODEand dbam.ISTBSXDB = 'Y')  STARTAMT,nvl(gur_marginaamt.MARGINAAMT, 0) MARGINAAMTfrom (select 1 as FLAG,mase.DTC_REFCODE,mase.REFCODE,mase.VALUEDATE,mase.LOANSUCCESSFLAG,mase.CANCELFLAG,mase.OTSTAMT,mase.LOANFLAG,mase.APPREFCODE,mase.LOANAMT,mase.LOANDATEfrom GYL.FLAAAASE mase  ---28Wwhere mase.seqno =(select max(seqno)from GYL.FLAAAASE newmase  ---28Wwhere newmase.ECFLAG = '0'and newmase.CANCELFLAG = '0'and newmase.LOANSUCCESSFLAG = '1'and newmase.REFCODE = mase.REFCODEand newmase.VALUEDATE <=To_date('20180916', 'YYYY-mm-dd'))union allselect 2 as FLAG,mase.DTC_REFCODE,mase.REFCODE,mase.VALUEDATE,'1' as LOANSUCCESSFLAG,'0' as CANCELFLAG,mase.RENTLNAMT - nvl(stg.OTSTAMT, 0) OTSTAMT,'2' as LOANFLAG,0 as APPREFCODE,mase.RENTLNAMT LOANAMT,mase.VALUEDATE LOANDATEfrom GYL.FLAAAATE mase -- 20left join (select stge.LFBATREFCODE, sum(T_OSTAMT) OTSTAMTfrom GYL.FLAAAAGE stgewhere stge.seqno =(select max(seqno)from GYL.FLAAAAGE newstgewhere newstge.REFCODE = stge.REFCODEand newstge.VALUEDATE <=To_date('20180916', 'YYYY-mm-dd')and newstge.ECFLAG = '0')group by stge.LFBATREFCODE) stgon stg.LFBATREFCODE = mase.REFCODEwhere mase.seqno =(select max(seqno)from GYL.FLAAAATE newmase--20where newmase.ECFLAG = '0'and newmase.REFCODE = mase.REFCODEand newmase.VALUEDATE <=To_date('20180916', 'YYYY-mm-dd'))and mase.DTC_REFCODE not in(select refcodefrom GYL.FAAAAACM subdtcwhere subdtc.BUSSTYPE in ('A021', 'A121'))) masleft join GYL.FAAAAACM dtcon dtc.REFCODE = mas.DTC_REFCODEleft join GYL.FAAAAASM selleron seller.REFCODE = dtc.SELLER_REFCODEleft join GYL.FAAAAASM buyeron buyer.REFCODE = dtc.BUYER_REFCODEleft join GYL.FAAAAAHM sellerbchon sellerbch.BCHID = seller.BCHIDleft join GYL.FAAAAAHM buyerbchon buyerbch.BCHID = buyer.BCHIDleft join GYL.FAAAAAHM sellerfbchon sellerfbch.BCHID = seller.FBCHIDleft join GYL.FAAAAAHM buyerfbchon buyerfbch.BCHID = buyer.FBCHIDleft join GYL.FIAAAASM buson bus.BUSSTYPE = dtc.BUSSTYPEleft join GYL.FIAAAAPM typon typ.TYPID = bus.TYPIDleft join (select txrefcode, sum(MARGINAAMT) MARGINAAMTfrom GYL.FMAAAARE gure --20Wwhere gure.EDTID <> 'DEL'and gure.seqno =(select max(seqno)from GYL.FMAAAARE newgure --20Wwhere newgure.REFCODE = gure.REFCODEand newgure.VALUEDATE <=To_date('20180916', 'YYYY-mm-dd')and newgure.DELFLAG = '0'and newgure.ECFLAG = '0')group by txrefcode) guron gur.txrefcode = mas.refcodeand mas.FLAG = 1left join (select txrefcode, sum(MARGINAAMT) MARGINAAMTfrom GYL.FMAAAARE gure --20Wwhere gure.EDTID <> 'DEL'and gure.seqno =(select max(seqno)from GYL.FMAAAARE newgure --20Wwhere newgure.REFCODE = gure.REFCODEand newgure.VALUEDATE <=To_date('20180916', 'YYYY-mm-dd')and newgure.DELFLAG = '0'and newgure.ECFLAG = '0'and gure.MARGINACCNNO is not null)group by txrefcode) gur_marginaamton gur_marginaamt.txrefcode = mas.refcodeand mas.FLAG = 1where 1 = 1and mas.CANCELFLAG = '0'and mas.LOANSUCCESSFLAG = '1'and mas.VALUEDATE <= To_date('20180916', 'YYYY-mm-dd')) awhere 1 = 1and a.BCHID in (SELECT BCHID FROM GYL.FAAAAAHM)group by SELLER_REFCODE, BCHDESC, FBCHDESC, BUSSTYPEorder by SELLER_REFCODE, BCHDESC, FBCHDESC, BUSSTYPE;Plan hash value: 395977065--------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                          | Name        | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                                   |             |   266 | 91504 |       |  1630K  (1)| 05:26:03 |
|   1 |  TABLE ACCESS BY INDEX ROWID                       | FAAAAASM    |     1 |    13 |       |     2   (0)| 00:00:01 |
|*  2 |   INDEX UNIQUE SCAN                                | FAAAAASM_PK |     1 |       |       |     1   (0)| 00:00:01 |
|   3 |  SORT GROUP BY                                     |             |   266 | 91504 |       |  1630K  (1)| 05:26:03 |
|   4 |   NESTED LOOPS                                     |             |   266 | 91504 |       |  1630K  (1)| 05:26:03 |
|*  5 |    HASH JOIN OUTER                                 |             |   266 | 89642 |       |  1630K  (1)| 05:26:03 |
|*  6 |     HASH JOIN OUTER                                |             |   266 | 84854 |       |  1629K  (1)| 05:25:52 |
|*  7 |      HASH JOIN OUTER                               |             |   266 | 74746 |       |  1629K  (1)| 05:25:52 |
|*  8 |       HASH JOIN OUTER                              |             |   266 | 64638 |       |  1629K  (1)| 05:25:52 |
|*  9 |        HASH JOIN OUTER                             |             |   266 | 60648 |       |  1629K  (1)| 05:25:50 |
|* 10 |         HASH JOIN OUTER                            |             |   266 | 50540 |       |  1629K  (1)| 05:25:50 |
|* 11 |          HASH JOIN OUTER                           |             |   266 | 40432 |       |  1629K  (1)| 05:25:50 |
|* 12 |           HASH JOIN RIGHT OUTER                    |             |   266 | 36442 |       |  1628K  (1)| 05:25:48 |
|  13 |            TABLE ACCESS FULL                       | FIAAAAPM    |    14 |    56 |       |     3   (0)| 00:00:01 |
|* 14 |            HASH JOIN RIGHT OUTER                   |             |   266 | 35378 |       |  1628K  (1)| 05:25:48 |
|  15 |             TABLE ACCESS FULL                      | FIAAAASM    |    26 |   182 |       |     3   (0)| 00:00:01 |
|* 16 |             HASH JOIN OUTER                        |             |   266 | 33516 |       |  1628K  (1)| 05:25:48 |
|* 17 |              HASH JOIN OUTER                       |             |   266 | 28728 |       |  1628K  (1)| 05:25:47 |
|* 18 |               HASH JOIN RIGHT OUTER                |             |   266 | 23940 |       |  1625K  (1)| 05:25:12 |
|  19 |                VIEW                                |             |     1 |    26 |       |  1618K  (1)| 05:23:42 |
|  20 |                 HASH GROUP BY                      |             |     1 |    40 |    11M|  1618K  (1)| 05:23:42 |
|* 21 |                  FILTER                            |             |       |       |       |            |          |
|* 22 |                   TABLE ACCESS FULL                | FMAAAARE    |   204K|  7982K|       |  1102   (1)| 00:00:14 |
|  23 |                   SORT AGGREGATE                   |             |     1 |    21 |       |            |          |
|* 24 |                    FILTER                          |             |       |       |       |            |          |
|* 25 |                     TABLE ACCESS BY INDEX ROWID    | FMAAAARE    |     5 |   105 |       |     8   (0)| 00:00:01 |
|* 26 |                      INDEX RANGE SCAN              | FMAAAARE_PK |     5 |       |       |     3   (0)| 00:00:01 |
|  27 |                VIEW                                |             |   266 | 17024 |       |  7533   (2)| 00:01:31 |
|  28 |                 UNION-ALL                          |             |       |       |       |            |          |
|* 29 |                  HASH JOIN                         |             |   265 | 19875 |       |  7458   (2)| 00:01:30 |
|  30 |                   VIEW                             | VW_SQ_2     | 44616 |  1132K|       |  4129   (2)| 00:00:50 |
|  31 |                    HASH GROUP BY                   |             | 44616 |  1002K|  9616K|  4129   (2)| 00:00:50 |
|* 32 |                     TABLE ACCESS FULL              | FLAAAASE    |   244K|  5502K|       |  3330   (2)| 00:00:40 |
|* 33 |                   TABLE ACCESS FULL                | FLAAAASE    |   247K|    11M|       |  3326   (2)| 00:00:40 |
|* 34 |                  HASH JOIN OUTER                   |             |     1 |    75 |       |    75   (3)| 00:00:01 |
|  35 |                   NESTED LOOPS                     |             |     1 |    49 |       |    74   (2)| 00:00:01 |
|* 36 |                    HASH JOIN ANTI SNA              |             |     1 |    36 |       |    72   (2)| 00:00:01 |
|* 37 |                     TABLE ACCESS FULL              | FLAAAATE    |    19 |   494 |       |     3   (0)| 00:00:01 |
|* 38 |                     TABLE ACCESS FULL              | FAAAAACM    |     7 |    70 |       |    68   (0)| 00:00:01 |
|* 39 |                    VIEW PUSHED PREDICATE           | VW_SQ_4     |     1 |    13 |       |     2   (0)| 00:00:01 |
|* 40 |                     FILTER                         |             |       |       |       |            |          |
|  41 |                      SORT AGGREGATE                |             |     1 |    17 |       |            |          |
|* 42 |                       TABLE ACCESS BY INDEX ROWID  | FLAAAATE    |     1 |    17 |       |     2   (0)| 00:00:01 |
|* 43 |                        INDEX RANGE SCAN            | FLAAAATE_PK |     1 |       |       |     1   (0)| 00:00:01 |
|  44 |                   VIEW                             |             |     1 |    26 |       |     1 (100)| 00:00:01 |
|  45 |                    HASH GROUP BY                   |             |     1 |    78 |       |     1 (100)| 00:00:01 |
|  46 |                     NESTED LOOPS                   |             |       |       |       |            |          |
|  47 |                      NESTED LOOPS                  |             |     1 |    78 |       |     0   (0)| 00:00:01 |
|  48 |                       VIEW                         | VW_SQ_3     |     1 |    26 |       |     0   (0)| 00:00:01 |
|  49 |                        HASH GROUP BY               |             |     1 |    38 |       |     0   (0)| 00:00:01 |
|* 50 |                         TABLE ACCESS BY INDEX ROWID| FLAAAAGE    |     1 |    38 |       |     0   (0)| 00:00:01 |
|  51 |                          INDEX FULL SCAN           | FLAAAAGE_PK |     1 |       |       |     0   (0)| 00:00:01 |
|* 52 |                       INDEX UNIQUE SCAN            | FLAAAAGE_PK |     1 |       |       |     0   (0)| 00:00:01 |
|  53 |                      TABLE ACCESS BY INDEX ROWID   | FLAAAAGE    |     1 |    52 |       |     0   (0)| 00:00:01 |
|  54 |               VIEW                                 |             |   868 | 15624 |       |  2875   (2)| 00:00:35 |
|  55 |                HASH GROUP BY                       |             |   868 | 34720 |       |  2875   (2)| 00:00:35 |
|* 56 |                 HASH JOIN                          |             |   868 | 34720 |       |  2874   (2)| 00:00:35 |
|  57 |                  VIEW                              | VW_SQ_1     | 42840 |   753K|       |  1770   (3)| 00:00:22 |
|  58 |                   HASH GROUP BY                    |             | 42840 |   878K|  7288K|  1770   (3)| 00:00:22 |
|* 59 |                    TABLE ACCESS FULL               | FMAAAARE    |   205K|  4214K|       |  1114   (3)| 00:00:14 |
|* 60 |                  TABLE ACCESS FULL                 | FMAAAARE    |   204K|  4390K|       |  1102   (1)| 00:00:14 |
|  61 |              TABLE ACCESS FULL                     | FAAAAACM    |  3501 | 63018 |       |    68   (0)| 00:00:01 |
|  62 |           TABLE ACCESS FULL                        | FAAAAASM    |  6051 | 90765 |       |   171   (1)| 00:00:03 |
|  63 |          TABLE ACCESS FULL                         | FAAAAAHM    |  2166 | 82308 |       |    11   (0)| 00:00:01 |
|  64 |         TABLE ACCESS FULL                          | FAAAAAHM    |  2166 | 82308 |       |    11   (0)| 00:00:01 |
|  65 |        TABLE ACCESS FULL                           | FAAAAASM    |  6051 | 90765 |       |   171   (1)| 00:00:03 |
|  66 |       TABLE ACCESS FULL                            | FAAAAAHM    |  2166 | 82308 |       |    11   (0)| 00:00:01 |
|  67 |      TABLE ACCESS FULL                             | FAAAAAHM    |  2166 | 82308 |       |    11   (0)| 00:00:01 |
|  68 |     VIEW                                           |             | 34882 |   613K|       |   866   (2)| 00:00:11 |
|  69 |      HASH GROUP BY                                 |             | 34882 |   374K|       |   866   (2)| 00:00:11 |
|* 70 |       TABLE ACCESS FULL                            | FAAAAAAM    | 48431 |   520K|       |   862   (2)| 00:00:11 |
|* 71 |    INDEX UNIQUE SCAN                               | FAAAAAHM_PK |     1 |     7 |       |     0   (0)| 00:00:01 |
--------------------------------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------2 - access("CUS"."REFCODE"=:B1)5 - access("DBAM"."APLREFCODE"(+)="MAS"."APPREFCODE")6 - access("BUYERFBCH"."BCHID"(+)="BUYER"."FBCHID")7 - access("BUYERBCH"."BCHID"(+)="BUYER"."BCHID")8 - access("BUYER"."REFCODE"(+)="DTC"."BUYER_REFCODE")9 - access("SELLERFBCH"."BCHID"(+)="SELLER"."FBCHID")10 - access("SELLERBCH"."BCHID"(+)="SELLER"."BCHID")11 - access("SELLER"."REFCODE"(+)="DTC"."SELLER_REFCODE")12 - access("TYP"."TYPID"(+)="BUS"."TYPID")14 - access("BUS"."BUSSTYPE"(+)="DTC"."BUSSTYPE")16 - access("DTC"."REFCODE"(+)="MAS"."DTC_REFCODE")17 - access("GUR"."TXREFCODE"(+)="MAS"."REFCODE" AND "MAS"."FLAG"=CASE  WHEN ("GUR"."TXREFCODE"(+) IS NOT NULL) THEN 1 ELSE 1 END )18 - access("GUR_MARGINAAMT"."TXREFCODE"(+)="MAS"."REFCODE" AND "MAS"."FLAG"=CASE  WHEN ("GUR_MARGINAAMT"."TXREFCODE"(+) IS NOT NULL) THEN 1 ELSE 1 END )21 - filter("GURE"."SEQNO"= (SELECT MAX("SEQNO") FROM "GYL"."FMAAAARE" "NEWGURE" WHERE :B1 IS NOT NULL AND "NEWGURE"."REFCODE"=:B2 AND "NEWGURE"."DELFLAG"='0' AND "NEWGURE"."ECFLAG"='0' AND "NEWGURE"."VALUEDATE"<=TO_DATE('20180916','YYYY-mm-dd')))22 - filter("GURE"."EDTID"<>U'DEL')24 - filter(:B1 IS NOT NULL)25 - filter("NEWGURE"."DELFLAG"='0' AND "NEWGURE"."ECFLAG"='0' AND "NEWGURE"."VALUEDATE"<=TO_DATE('20180916','YYYY-mm-dd'))26 - access("NEWGURE"."REFCODE"=:B1)29 - access("MASE"."SEQNO"="MAX(SEQNO)" AND "ITEM_2"="MASE"."REFCODE")32 - filter("NEWMASE"."LOANSUCCESSFLAG"='1' AND "NEWMASE"."ECFLAG"='0' AND "NEWMASE"."CANCELFLAG"='0' AND "NEWMASE"."VALUEDATE"<=TO_DATE('20180916','YYYY-mm-dd'))33 - filter("MASE"."LOANSUCCESSFLAG"='1' AND "MASE"."CANCELFLAG"='0' AND "MASE"."VALUEDATE"<=TO_DATE('20180916','YYYY-mm-dd'))34 - access("STG"."LFBATREFCODE"(+)="MASE"."REFCODE")36 - access("MASE"."DTC_REFCODE"="REFCODE")37 - filter("MASE"."VALUEDATE"<=TO_DATE('20180916','YYYY-mm-dd'))38 - filter("SUBDTC"."BUSSTYPE"=U'A021' OR "SUBDTC"."BUSSTYPE"=U'A121')39 - filter("MASE"."SEQNO"="MAX(SEQNO)")40 - filter(COUNT(*)>0 AND '0'='0' AND '1'='1')42 - filter("NEWMASE"."ECFLAG"='0' AND "NEWMASE"."VALUEDATE"<=TO_DATE('20180916','YYYY-mm-dd'))43 - access("NEWMASE"."REFCODE"="MASE"."REFCODE")50 - filter("NEWSTGE"."ECFLAG"='0' AND "NEWSTGE"."VALUEDATE"<=TO_DATE('20180916','YYYY-mm-dd'))52 - access("ITEM_3"="STGE"."REFCODE" AND "STGE"."SEQNO"="MAX(SEQNO)")56 - access("GURE"."SEQNO"="MAX(SEQNO)" AND "ITEM_1"="GURE"."REFCODE")59 - filter("NEWGURE"."DELFLAG"='0' AND "NEWGURE"."ECFLAG"='0' AND "NEWGURE"."VALUEDATE"<=TO_DATE('20180916','YYYY-mm-dd'))60 - filter("GURE"."EDTID"<>U'DEL')70 - filter("ISTBSXDB"='Y')71 - access("BCHID"=CASE  WHEN (("TYP"."FACTSTATUS"='P') OR ("TYP"."FACTSTATUS"='G')) THEN "BUYER"."BCHID" ELSE "SELLER"."BCHID" END )

使用之前的脚本抓取SQL中的对象信息如下:

OWNER  OBJECT_TYPE      OBJECT_NAME     PARTITIONED    SIZE_MB   NUM_ROWS LAST_ANALYZED STATUS
---------------------- --------------- ----------- ---------- ---------- ------------- ---------------------
GYL    TABLE            FAAAAAAM        NO                  26     143894 2018/6/26 22: 统计信息未过期
GYL    TABLE            FAAAAASM        NO                   5       6051 2018/9/16 14: 统计信息未过期
GYL    TABLE            FAAAAACM        NO                   2       3501 2018/8/28 22: 统计信息未过期
GYL    TABLE            FAAAAAHM        NO              0.3125       2166 2018/3/28 22: 统计信息未过期
GYL    TABLE            FIAAAASM        NO              0.0625         26 2017/9/14 22: 统计信息未过期
GYL    TABLE            FIAAAAPM        NO              0.0625         14 2017/9/14 22: 统计信息未过期
GYL    TABLE            FLAAAATE        NO              0.0625         19 2017/6/30 22: 统计信息未过期
GYL    TABLE            FLAAAAGE        NO              0.0625          0 2013/7/26 3:1 统计信息未过期
GYL    TABLE            FLAAAASE        NO                  96     288041 2018/9/6 22:0 统计信息未过期
GYL    TABLE            FMAAAARE        NO                  34     205634 2018/6/13 22: 统计信息未过期
GYL    INDEX (UNIQUE)   FAAAAASM_PK     NO              0.1875       6051 2018/9/16 14: 统计信息未过期
GYL    INDEX (UNIQUE)   FAAAAAHM_PK     NO               0.125       2166 2018/3/28 22: 统计信息未过期
GYL    INDEX (UNIQUE)   FLAAAATE_PK     NO              0.0625         19 2017/6/30 22: 统计信息未过期
GYL    INDEX (UNIQUE)   FLAAAAGE_PK     NO              0.0625          0 2013/7/26 3:1 统计信息未过期
GYL    INDEX (UNIQUE)   FMAAAARE_PK     NO                   7     205634 2018/6/13 22: 统计信息未过期15 rows selected

表统计信息没有过期,而且最大的表也不到30w行。这样一条语句居然执行了30分钟~

针对这种SQL长,执行计划也长的SQL应该怎么快速定位性能瓶颈?

我之前的博客里面一直推崇的方法就是:找大表,好像不太适用。但是也可以用,只不过需要多找几步

我们今天换一种方法:找坑~也就是可能引起性能隐患的地方。其实我前面的博客提过 这种点不多:标量子查询、自定义函数、笛卡尔积、FILTER、嵌套循环(驱动表统计信息过期的时候)……

通过观察SQL,我们很容易发现标量子查询:

还不知道标量子查询是什么的,我之前的博客里面有详细讲解https://blog.csdn.net/Skybig1988/article/details/71171701

SQL语句的第1行和第63行,标量子查询的原理就是外循环返回的每一行  到内循环去匹配,针对这两个标量子查询 外循环返回的行数是一致的。主要看内循环 第一行这个FAAAAASM表很小 只有5MB ,第63行这个表FAAAAAAM大小26MB,如果外循环返回10000行,内循环里面FAAAAASM和 FAAAAAAM会被全表扫描10000次.第63行这个表消耗的资源是第一行的标量所消耗资源的好几倍。先干掉性能瓶颈:我们就先改写第63行的标量,如果还不行我们再改写第1行的标量。改写完的SQL和执行计划如下:

select (select EC_CUST_NOfrom GYL.FAAAAASM cuswhere cus.refcode = a.SELLER_REFCODE) EC_CUST_NO,BUSSTYPE,sum(LOANAMT) SUMLOANAMT,sum(OTSTAMT) SUMOTSTAMT,sum(YPOTSTAMT) SUMYPOTSTAMT,sum(YXCK) SUMYXCK,sum(STARTAMT) SUMSTARTAMT,sum(MARGINAAMT) SUMMARGINAAMTfrom (select casewhen typ.FACTSTATUS in ('P', 'G') thenbuyer.BCHIDelseseller.BCHIDend BCHID,casewhen typ.FACTSTATUS in ('P', 'G') thenbuyer.REFCODEelseseller.REFCODEend SELLER_REFCODE,casewhen typ.FACTSTATUS in ('P', 'G') thenbuyerbch.BCHDESCelsesellerbch.BCHDESCend BCHDESC,casewhen typ.FACTSTATUS in ('P', 'G') thenbuyerfbch.BCHDESCelsesellerfbch.BCHDESCend FBCHDESC,bus.BUSSTYPE,nvl(casewhen (mas.LOANDATE >= To_date('20180916', 'YYYY-mm-dd') andmas.LOANDATE <= To_date('20180916', 'YYYY-mm-dd')) thenmas.LOANAMTelse0end,0) LOANAMT,casewhen mas.loanflag = '2' thenmas.OTSTAMTelse0end OTSTAMT,casewhen mas.loanflag = '1' thenmas.OTSTAMTelse0end YPOTSTAMT,nvl((casewhen (mas.OTSTAMT - nvl(gur.MARGINAAMT, 0)) < 0 then0else(mas.OTSTAMT - nvl(gur.MARGINAAMT, 0))end),0) YXCK,dbam.STARTAMT,nvl(gur_marginaamt.MARGINAAMT, 0) MARGINAAMTfrom (select 1 as FLAG,mase.DTC_REFCODE,mase.REFCODE,mase.VALUEDATE,mase.LOANSUCCESSFLAG,mase.CANCELFLAG,mase.OTSTAMT,mase.LOANFLAG,mase.APPREFCODE,mase.LOANAMT,mase.LOANDATEfrom GYL.FLAAAASE mase  ---28Wwhere mase.seqno =(select max(seqno)from GYL.FLAAAASE newmase  ---28Wwhere newmase.ECFLAG = '0'and newmase.CANCELFLAG = '0'and newmase.LOANSUCCESSFLAG = '1'and newmase.REFCODE = mase.REFCODEand newmase.VALUEDATE <=To_date('20180916', 'YYYY-mm-dd'))union allselect 2 as FLAG,mase.DTC_REFCODE,mase.REFCODE,mase.VALUEDATE,'1' as LOANSUCCESSFLAG,'0' as CANCELFLAG,mase.RENTLNAMT - nvl(stg.OTSTAMT, 0) OTSTAMT,'2' as LOANFLAG,0 as APPREFCODE,mase.RENTLNAMT LOANAMT,mase.VALUEDATE LOANDATEfrom GYL.FLAAAATE mase -- 20left join (select stge.LFBATREFCODE, sum(T_OSTAMT) OTSTAMTfrom GYL.FLAAAAGE stgewhere stge.seqno =(select max(seqno)from GYL.FLAAAAGE newstgewhere newstge.REFCODE = stge.REFCODEand newstge.VALUEDATE <=To_date('20180916', 'YYYY-mm-dd')and newstge.ECFLAG = '0')group by stge.LFBATREFCODE) stgon stg.LFBATREFCODE = mase.REFCODEwhere mase.seqno =(select max(seqno)from GYL.FLAAAATE newmase--20where newmase.ECFLAG = '0'and newmase.REFCODE = mase.REFCODEand newmase.VALUEDATE <=To_date('20180916', 'YYYY-mm-dd'))and mase.DTC_REFCODE not in(select refcodefrom GYL.FAAAAACM subdtcwhere subdtc.BUSSTYPE in ('A021', 'A121'))) masleft join  (select APLREFCODE,nvl(sum(nvl(DBALOANAMT, 0)), 0) STARTAMT ---标量子查询改成外连接from GYL.FAAAAAAM  --14Wwhere  ISTBSXDB = 'Y' group by APLREFCODE) dbam on dbam.APLREFCODE = mas.APPREFCODE             left join GYL.FAAAAACM dtcon dtc.REFCODE = mas.DTC_REFCODEleft join GYL.FAAAAASM selleron seller.REFCODE = dtc.SELLER_REFCODEleft join GYL.FAAAAASM buyeron buyer.REFCODE = dtc.BUYER_REFCODEleft join GYL.FAAAAAHM sellerbchon sellerbch.BCHID = seller.BCHIDleft join GYL.FAAAAAHM buyerbchon buyerbch.BCHID = buyer.BCHIDleft join GYL.FAAAAAHM sellerfbchon sellerfbch.BCHID = seller.FBCHIDleft join GYL.FAAAAAHM buyerfbchon buyerfbch.BCHID = buyer.FBCHIDleft join GYL.FIAAAASM buson bus.BUSSTYPE = dtc.BUSSTYPEleft join GYL.FIAAAAPM typon typ.TYPID = bus.TYPIDleft join (select txrefcode, sum(MARGINAAMT) MARGINAAMTfrom GYL.FMAAAARE gure --20Wwhere gure.EDTID <> 'DEL'and gure.seqno =(select max(seqno)from GYL.FMAAAARE newgure --20Wwhere newgure.REFCODE = gure.REFCODEand newgure.VALUEDATE <=To_date('20180916', 'YYYY-mm-dd')and newgure.DELFLAG = '0'and newgure.ECFLAG = '0')group by txrefcode) guron gur.txrefcode = mas.refcodeand mas.FLAG = 1left join (select txrefcode, sum(MARGINAAMT) MARGINAAMTfrom GYL.FMAAAARE gure --20Wwhere gure.EDTID <> 'DEL'and gure.seqno =(select max(seqno)from GYL.FMAAAARE newgure --20Wwhere newgure.REFCODE = gure.REFCODEand newgure.VALUEDATE <=To_date('20180916', 'YYYY-mm-dd')and newgure.DELFLAG = '0'and newgure.ECFLAG = '0'and gure.MARGINACCNNO is not null)group by txrefcode) gur_marginaamton gur_marginaamt.txrefcode = mas.refcodeand mas.FLAG = 1where 1 = 1and mas.CANCELFLAG = '0'and mas.LOANSUCCESSFLAG = '1'and mas.VALUEDATE <= To_date('20180916', 'YYYY-mm-dd')) awhere 1 = 1and a.BCHID in (SELECT BCHID FROM GYL.FAAAAAHM)group by SELLER_REFCODE, BCHDESC, FBCHDESC, BUSSTYPEorder by SELLER_REFCODE, BCHDESC, FBCHDESC, BUSSTYPE;Plan hash value: 395977065--------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                          | Name        | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                                   |             |   266 | 91504 |       |  1630K  (1)| 05:26:03 |
|   1 |  TABLE ACCESS BY INDEX ROWID                       | FAAAAASM    |     1 |    13 |       |     2   (0)| 00:00:01 |
|*  2 |   INDEX UNIQUE SCAN                                | FAAAAASM_PK |     1 |       |       |     1   (0)| 00:00:01 |
|   3 |  SORT GROUP BY                                     |             |   266 | 91504 |       |  1630K  (1)| 05:26:03 |
|   4 |   NESTED LOOPS                                     |             |   266 | 91504 |       |  1630K  (1)| 05:26:03 |
|*  5 |    HASH JOIN OUTER                                 |             |   266 | 89642 |       |  1630K  (1)| 05:26:03 |
|*  6 |     HASH JOIN OUTER                                |             |   266 | 84854 |       |  1629K  (1)| 05:25:52 |
|*  7 |      HASH JOIN OUTER                               |             |   266 | 74746 |       |  1629K  (1)| 05:25:52 |
|*  8 |       HASH JOIN OUTER                              |             |   266 | 64638 |       |  1629K  (1)| 05:25:52 |
|*  9 |        HASH JOIN OUTER                             |             |   266 | 60648 |       |  1629K  (1)| 05:25:50 |
|* 10 |         HASH JOIN OUTER                            |             |   266 | 50540 |       |  1629K  (1)| 05:25:50 |
|* 11 |          HASH JOIN OUTER                           |             |   266 | 40432 |       |  1629K  (1)| 05:25:50 |
|* 12 |           HASH JOIN RIGHT OUTER                    |             |   266 | 36442 |       |  1628K  (1)| 05:25:48 |
|  13 |            TABLE ACCESS FULL                       | FIAAAAPM    |    14 |    56 |       |     3   (0)| 00:00:01 |
|* 14 |            HASH JOIN RIGHT OUTER                   |             |   266 | 35378 |       |  1628K  (1)| 05:25:48 |
|  15 |             TABLE ACCESS FULL                      | FIAAAASM    |    26 |   182 |       |     3   (0)| 00:00:01 |
|* 16 |             HASH JOIN OUTER                        |             |   266 | 33516 |       |  1628K  (1)| 05:25:48 |
|* 17 |              HASH JOIN OUTER                       |             |   266 | 28728 |       |  1628K  (1)| 05:25:47 |
|* 18 |               HASH JOIN RIGHT OUTER                |             |   266 | 23940 |       |  1625K  (1)| 05:25:12 |
|  19 |                VIEW                                |             |     1 |    26 |       |  1618K  (1)| 05:23:42 |
|  20 |                 HASH GROUP BY                      |             |     1 |    40 |    11M|  1618K  (1)| 05:23:42 |
|* 21 |                  FILTER                            |             |       |       |       |            |          |
|* 22 |                   TABLE ACCESS FULL                | FMAAAARE    |   204K|  7982K|       |  1102   (1)| 00:00:14 |
|  23 |                   SORT AGGREGATE                   |             |     1 |    21 |       |            |          |
|* 24 |                    FILTER                          |             |       |       |       |            |          |
|* 25 |                     TABLE ACCESS BY INDEX ROWID    | FMAAAARE    |     5 |   105 |       |     8   (0)| 00:00:01 |
|* 26 |                      INDEX RANGE SCAN              | FMAAAARE_PK |     5 |       |       |     3   (0)| 00:00:01 |
|  27 |                VIEW                                |             |   266 | 17024 |       |  7533   (2)| 00:01:31 |
|  28 |                 UNION-ALL                          |             |       |       |       |            |          |
|* 29 |                  HASH JOIN                         |             |   265 | 19875 |       |  7458   (2)| 00:01:30 |
|  30 |                   VIEW                             | VW_SQ_2     | 44616 |  1132K|       |  4129   (2)| 00:00:50 |
|  31 |                    HASH GROUP BY                   |             | 44616 |  1002K|  9616K|  4129   (2)| 00:00:50 |
|* 32 |                     TABLE ACCESS FULL              | FLAAAASE    |   244K|  5502K|       |  3330   (2)| 00:00:40 |
|* 33 |                   TABLE ACCESS FULL                | FLAAAASE    |   247K|    11M|       |  3326   (2)| 00:00:40 |
|* 34 |                  HASH JOIN OUTER                   |             |     1 |    75 |       |    75   (3)| 00:00:01 |
|  35 |                   NESTED LOOPS                     |             |     1 |    49 |       |    74   (2)| 00:00:01 |
|* 36 |                    HASH JOIN ANTI SNA              |             |     1 |    36 |       |    72   (2)| 00:00:01 |
|* 37 |                     TABLE ACCESS FULL              | FLAAAATE    |    19 |   494 |       |     3   (0)| 00:00:01 |
|* 38 |                     TABLE ACCESS FULL              | FAAAAACM    |     7 |    70 |       |    68   (0)| 00:00:01 |
|* 39 |                    VIEW PUSHED PREDICATE           | VW_SQ_4     |     1 |    13 |       |     2   (0)| 00:00:01 |
|* 40 |                     FILTER                         |             |       |       |       |            |          |
|  41 |                      SORT AGGREGATE                |             |     1 |    17 |       |            |          |
|* 42 |                       TABLE ACCESS BY INDEX ROWID  | FLAAAATE    |     1 |    17 |       |     2   (0)| 00:00:01 |
|* 43 |                        INDEX RANGE SCAN            | FLAAAATE_PK |     1 |       |       |     1   (0)| 00:00:01 |
|  44 |                   VIEW                             |             |     1 |    26 |       |     1 (100)| 00:00:01 |
|  45 |                    HASH GROUP BY                   |             |     1 |    78 |       |     1 (100)| 00:00:01 |
|  46 |                     NESTED LOOPS                   |             |       |       |       |            |          |
|  47 |                      NESTED LOOPS                  |             |     1 |    78 |       |     0   (0)| 00:00:01 |
|  48 |                       VIEW                         | VW_SQ_3     |     1 |    26 |       |     0   (0)| 00:00:01 |
|  49 |                        HASH GROUP BY               |             |     1 |    38 |       |     0   (0)| 00:00:01 |
|* 50 |                         TABLE ACCESS BY INDEX ROWID| FLAAAAGE    |     1 |    38 |       |     0   (0)| 00:00:01 |
|  51 |                          INDEX FULL SCAN           | FLAAAAGE_PK |     1 |       |       |     0   (0)| 00:00:01 |
|* 52 |                       INDEX UNIQUE SCAN            | FLAAAAGE_PK |     1 |       |       |     0   (0)| 00:00:01 |
|  53 |                      TABLE ACCESS BY INDEX ROWID   | FLAAAAGE    |     1 |    52 |       |     0   (0)| 00:00:01 |
|  54 |               VIEW                                 |             |   868 | 15624 |       |  2875   (2)| 00:00:35 |
|  55 |                HASH GROUP BY                       |             |   868 | 34720 |       |  2875   (2)| 00:00:35 |
|* 56 |                 HASH JOIN                          |             |   868 | 34720 |       |  2874   (2)| 00:00:35 |
|  57 |                  VIEW                              | VW_SQ_1     | 42840 |   753K|       |  1770   (3)| 00:00:22 |
|  58 |                   HASH GROUP BY                    |             | 42840 |   878K|  7288K|  1770   (3)| 00:00:22 |
|* 59 |                    TABLE ACCESS FULL               | FMAAAARE    |   205K|  4214K|       |  1114   (3)| 00:00:14 |
|* 60 |                  TABLE ACCESS FULL                 | FMAAAARE    |   204K|  4390K|       |  1102   (1)| 00:00:14 |
|  61 |              TABLE ACCESS FULL                     | FAAAAACM    |  3501 | 63018 |       |    68   (0)| 00:00:01 |
|  62 |           TABLE ACCESS FULL                        | FAAAAASM    |  6051 | 90765 |       |   171   (1)| 00:00:03 |
|  63 |          TABLE ACCESS FULL                         | FAAAAAHM    |  2166 | 82308 |       |    11   (0)| 00:00:01 |
|  64 |         TABLE ACCESS FULL                          | FAAAAAHM    |  2166 | 82308 |       |    11   (0)| 00:00:01 |
|  65 |        TABLE ACCESS FULL                           | FAAAAASM    |  6051 | 90765 |       |   171   (1)| 00:00:03 |
|  66 |       TABLE ACCESS FULL                            | FAAAAAHM    |  2166 | 82308 |       |    11   (0)| 00:00:01 |
|  67 |      TABLE ACCESS FULL                             | FAAAAAHM    |  2166 | 82308 |       |    11   (0)| 00:00:01 |
|  68 |     VIEW                                           |             | 34882 |   613K|       |   866   (2)| 00:00:11 |
|  69 |      HASH GROUP BY                                 |             | 34882 |   374K|       |   866   (2)| 00:00:11 |
|* 70 |       TABLE ACCESS FULL                            | FAAAAAAM    | 48431 |   520K|       |   862   (2)| 00:00:11 |
|* 71 |    INDEX UNIQUE SCAN                               | FAAAAAHM_PK |     1 |     7 |       |     0   (0)| 00:00:01 |
--------------------------------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------2 - access("CUS"."REFCODE"=:B1)5 - access("DBAM"."APLREFCODE"(+)="MAS"."APPREFCODE")6 - access("BUYERFBCH"."BCHID"(+)="BUYER"."FBCHID")7 - access("BUYERBCH"."BCHID"(+)="BUYER"."BCHID")8 - access("BUYER"."REFCODE"(+)="DTC"."BUYER_REFCODE")9 - access("SELLERFBCH"."BCHID"(+)="SELLER"."FBCHID")10 - access("SELLERBCH"."BCHID"(+)="SELLER"."BCHID")11 - access("SELLER"."REFCODE"(+)="DTC"."SELLER_REFCODE")12 - access("TYP"."TYPID"(+)="BUS"."TYPID")14 - access("BUS"."BUSSTYPE"(+)="DTC"."BUSSTYPE")16 - access("DTC"."REFCODE"(+)="MAS"."DTC_REFCODE")17 - access("GUR"."TXREFCODE"(+)="MAS"."REFCODE" AND "MAS"."FLAG"=CASE  WHEN ("GUR"."TXREFCODE"(+) IS NOT NULL) THEN 1 ELSE 1 END )18 - access("GUR_MARGINAAMT"."TXREFCODE"(+)="MAS"."REFCODE" AND "MAS"."FLAG"=CASE  WHEN ("GUR_MARGINAAMT"."TXREFCODE"(+) IS NOT NULL) THEN 1 ELSE 1 END )21 - filter("GURE"."SEQNO"= (SELECT MAX("SEQNO") FROM "GYL"."FMAAAARE" "NEWGURE" WHERE :B1 IS NOT NULL AND "NEWGURE"."REFCODE"=:B2 AND "NEWGURE"."DELFLAG"='0' AND "NEWGURE"."ECFLAG"='0' AND "NEWGURE"."VALUEDATE"<=TO_DATE('20180916','YYYY-mm-dd')))22 - filter("GURE"."EDTID"<>U'DEL')24 - filter(:B1 IS NOT NULL)25 - filter("NEWGURE"."DELFLAG"='0' AND "NEWGURE"."ECFLAG"='0' AND "NEWGURE"."VALUEDATE"<=TO_DATE('20180916','YYYY-mm-dd'))26 - access("NEWGURE"."REFCODE"=:B1)29 - access("MASE"."SEQNO"="MAX(SEQNO)" AND "ITEM_2"="MASE"."REFCODE")32 - filter("NEWMASE"."LOANSUCCESSFLAG"='1' AND "NEWMASE"."ECFLAG"='0' AND "NEWMASE"."CANCELFLAG"='0' AND "NEWMASE"."VALUEDATE"<=TO_DATE('20180916','YYYY-mm-dd'))33 - filter("MASE"."LOANSUCCESSFLAG"='1' AND "MASE"."CANCELFLAG"='0' AND "MASE"."VALUEDATE"<=TO_DATE('20180916','YYYY-mm-dd'))34 - access("STG"."LFBATREFCODE"(+)="MASE"."REFCODE")36 - access("MASE"."DTC_REFCODE"="REFCODE")37 - filter("MASE"."VALUEDATE"<=TO_DATE('20180916','YYYY-mm-dd'))38 - filter("SUBDTC"."BUSSTYPE"=U'A021' OR "SUBDTC"."BUSSTYPE"=U'A121')39 - filter("MASE"."SEQNO"="MAX(SEQNO)")40 - filter(COUNT(*)>0 AND '0'='0' AND '1'='1')42 - filter("NEWMASE"."ECFLAG"='0' AND "NEWMASE"."VALUEDATE"<=TO_DATE('20180916','YYYY-mm-dd'))43 - access("NEWMASE"."REFCODE"="MASE"."REFCODE")50 - filter("NEWSTGE"."ECFLAG"='0' AND "NEWSTGE"."VALUEDATE"<=TO_DATE('20180916','YYYY-mm-dd'))52 - access("ITEM_3"="STGE"."REFCODE" AND "STGE"."SEQNO"="MAX(SEQNO)")56 - access("GURE"."SEQNO"="MAX(SEQNO)" AND "ITEM_1"="GURE"."REFCODE")59 - filter("NEWGURE"."DELFLAG"='0' AND "NEWGURE"."ECFLAG"='0' AND "NEWGURE"."VALUEDATE"<=TO_DATE('20180916','YYYY-mm-dd'))60 - filter("GURE"."EDTID"<>U'DEL')70 - filter("ISTBSXDB"='Y')71 - access("BCHID"=CASE  WHEN (("TYP"."FACTSTATUS"='P') OR ("TYP"."FACTSTATUS"='G')) THEN "BUYER"."BCHID" ELSE "SELLER"."BCHID" END )

改写完之后  SQL2分钟出结果,达到要求!!!!如果有强迫症可以把第一行的标量也改了,这样SQL的运行效率还会有少许提升~

又是标量子查询引起的性能问题相关推荐

  1. 性能为王:SQL标量子查询的优化案例分析

    本篇整理内容是黄廷忠在"云和恩墨大讲堂"微信分享中的讲解案例,SQL优化及SQL审核,是从源头解决性能问题的根本手段,无论是开发人员还是DBA,都应当持续深入的学习SQL开发技能, ...

  2. 标量子查询产生的SQL性能瓶颈,该怎么合理优化?

    来自:DBAplus社群 作者介绍 郝昊喆,新炬网络数据库专家.擅长数据库方面的开发.整体架构及复杂SQL的调优,参与了多个行业核心系统的优化工作,目前专注于对开源技术.自动化运维和性能调优技术的研究 ...

  3. [20180602]函数与标量子查询3.txt

    [20180602]函数与标量子查询3.txt --//前面看http://www.cnblogs.com/kerrycode/p/9099507.html链接,里面提到: 通俗来将,当使用标量子查询 ...

  4. 20180601]函数与标量子查询2.txt

    [20180601]函数与标量子查询2.txt --//昨天看http://www.cnblogs.com/kerrycode/p/9099507.html链接,里面提到: 通俗来将,当使用标量子查询 ...

  5. 12C 新特性 | 标量子查询自动转换

    有超过6年超大型数据库专业服务经验,擅长数据库解决方案设计与项目管理:在多年的技术实践中,先后为运营商(移动.电信).银行.保险.制造业等各行业客户的业务关键型系统提供了运维.升级.性能优化.项目实施 ...

  6. sql 标量子查询_SQL Server 2017:标量子查询简化

    sql 标量子查询 Nowadays a lot of developers use Object-Relational Mapping (ORM) frameworks. ORM is a prog ...

  7. [20180626]函数与标量子查询14.txt

    [20180626]函数与标量子查询14.txt --//前面看http://www.cnblogs.com/kerrycode/p/9099507.html链接,里面提到: 通俗来将,当使用标量子查 ...

  8. oracle标量子查询 外层,Oracle标量子查询

    Oracle标量子查询 ORACLE允许在select子句中包含单行子查询, 使用标量子查询可以有效的改善性能,当使用到外部连接,或者使用到了聚合函数,就可以考虑标量子查询的可能性. 下面来看几个例子 ...

  9. 优化案例2:select标量子查询且主查询排序

    优化案例2:select标量子查询且主查询排序 1. 场景描述 2. 分析过程 2.1 查看原始SQL执行计划 2.2 ET定位耗时操作符 2.3 注释大法 3. 解决方法 3.1 HINT功法 3. ...

最新文章

  1. Spring中配置Quartz的misfireInstruction
  2. 《Android的设计与实现:卷I》——第2章 框架基础JNI
  3. Spring Cloud Alibaba源码 - 16 Nacos 注册中心源码解析
  4. [转]Joomla! 1.5中form表单的实现方式
  5. vs环境下C++dll生成和使用(基础篇)
  6. 你是个失败者,有什么资格说话?
  7. 《剑指Offer》用两个栈来实现队列
  8. 一起撸个朋友圈吧 (Step6) 评论对齐(点击评论对齐)【下】
  9. 7-21 九宫格输入法 (15 point(s))
  10. Eclipse注释模板与规范
  11. 超声波测距原理与实现
  12. 消防Linux软件图形显示系统,消防控制室图形显示装置
  13. java.lang.ClassNotFoundException(通俗易懂)
  14. 手写数字识别系统(python+K-近邻完整代码)
  15. 中国十大域名注册虚拟主机提供商排行榜
  16. Java cipher加密与解密
  17. APK文件使用ApkTool解包反编译和重新打包及签名
  18. C语言求:歌德巴赫猜想
  19. BootLoader——嵌入式系统的引导加载程序
  20. 风格对照表的制作与使用

热门文章

  1. 神策军 | 我有一本书,你拿思想来换
  2. PhpStorm 去除右侧白线
  3. python语言基础与应用慕课课堂测试_Python语言基础与应用_中国大学mooc慕课_期末考试选修课答案...
  4. 什么是Web开发?如何成为一个Python Web开发人员?
  5. Redis --- 学习 NoSQL 五大类型
  6. Draw Triangel 1. HackerRank SQL Problem
  7. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 K-Dimensional Foil II(思维题)
  8. 上海大数据技术汇(浦东爱酷空间)
  9. 《仰望》——保罗 詹尼斯
  10. 使用H5Stream实现rtsp流播放,并整合到web项目中