又是标量子查询引起的性能问题
某系统巡检,发现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的运行效率还会有少许提升~
又是标量子查询引起的性能问题相关推荐
- 性能为王:SQL标量子查询的优化案例分析
本篇整理内容是黄廷忠在"云和恩墨大讲堂"微信分享中的讲解案例,SQL优化及SQL审核,是从源头解决性能问题的根本手段,无论是开发人员还是DBA,都应当持续深入的学习SQL开发技能, ...
- 标量子查询产生的SQL性能瓶颈,该怎么合理优化?
来自:DBAplus社群 作者介绍 郝昊喆,新炬网络数据库专家.擅长数据库方面的开发.整体架构及复杂SQL的调优,参与了多个行业核心系统的优化工作,目前专注于对开源技术.自动化运维和性能调优技术的研究 ...
- [20180602]函数与标量子查询3.txt
[20180602]函数与标量子查询3.txt --//前面看http://www.cnblogs.com/kerrycode/p/9099507.html链接,里面提到: 通俗来将,当使用标量子查询 ...
- 20180601]函数与标量子查询2.txt
[20180601]函数与标量子查询2.txt --//昨天看http://www.cnblogs.com/kerrycode/p/9099507.html链接,里面提到: 通俗来将,当使用标量子查询 ...
- 12C 新特性 | 标量子查询自动转换
有超过6年超大型数据库专业服务经验,擅长数据库解决方案设计与项目管理:在多年的技术实践中,先后为运营商(移动.电信).银行.保险.制造业等各行业客户的业务关键型系统提供了运维.升级.性能优化.项目实施 ...
- sql 标量子查询_SQL Server 2017:标量子查询简化
sql 标量子查询 Nowadays a lot of developers use Object-Relational Mapping (ORM) frameworks. ORM is a prog ...
- [20180626]函数与标量子查询14.txt
[20180626]函数与标量子查询14.txt --//前面看http://www.cnblogs.com/kerrycode/p/9099507.html链接,里面提到: 通俗来将,当使用标量子查 ...
- oracle标量子查询 外层,Oracle标量子查询
Oracle标量子查询 ORACLE允许在select子句中包含单行子查询, 使用标量子查询可以有效的改善性能,当使用到外部连接,或者使用到了聚合函数,就可以考虑标量子查询的可能性. 下面来看几个例子 ...
- 优化案例2:select标量子查询且主查询排序
优化案例2:select标量子查询且主查询排序 1. 场景描述 2. 分析过程 2.1 查看原始SQL执行计划 2.2 ET定位耗时操作符 2.3 注释大法 3. 解决方法 3.1 HINT功法 3. ...
最新文章
- Spring中配置Quartz的misfireInstruction
- 《Android的设计与实现:卷I》——第2章 框架基础JNI
- Spring Cloud Alibaba源码 - 16 Nacos 注册中心源码解析
- [转]Joomla! 1.5中form表单的实现方式
- vs环境下C++dll生成和使用(基础篇)
- 你是个失败者,有什么资格说话?
- 《剑指Offer》用两个栈来实现队列
- 一起撸个朋友圈吧 (Step6) 评论对齐(点击评论对齐)【下】
- 7-21 九宫格输入法 (15 point(s))
- Eclipse注释模板与规范
- 超声波测距原理与实现
- 消防Linux软件图形显示系统,消防控制室图形显示装置
- java.lang.ClassNotFoundException(通俗易懂)
- 手写数字识别系统(python+K-近邻完整代码)
- 中国十大域名注册虚拟主机提供商排行榜
- Java cipher加密与解密
- APK文件使用ApkTool解包反编译和重新打包及签名
- C语言求:歌德巴赫猜想
- BootLoader——嵌入式系统的引导加载程序
- 风格对照表的制作与使用
热门文章
- 神策军 | 我有一本书,你拿思想来换
- PhpStorm 去除右侧白线
- python语言基础与应用慕课课堂测试_Python语言基础与应用_中国大学mooc慕课_期末考试选修课答案...
- 什么是Web开发?如何成为一个Python Web开发人员?
- Redis --- 学习 NoSQL 五大类型
- Draw Triangel 1. HackerRank SQL Problem
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 K-Dimensional Foil II(思维题)
- 上海大数据技术汇(浦东爱酷空间)
- 《仰望》——保罗 詹尼斯
- 使用H5Stream实现rtsp流播放,并整合到web项目中