日期:2014-05-17  浏览次数:20893 次

请各位大侠帮我看看这个SQL可以优化吗?现在performance很低,谢谢了。
如下 这个SQL,结果已经认为是正确的,就是performance比较低,
解释一下:
前面是一些属性(类似数据仓库中dimension),后面是一些Amount(类似数据仓库中fact),是一个字段A5.AM,在A5.AMTYNA的不同情况下取值,请问大侠们有什么好的建议吗?数据库已经成型,只能从现有的设计上想方法了。
附explain plan。


SELECT  
TO_CHAR(SYSDATE,'YYYYMMDD') AS AS_OF_DT,
'SG' AS COUNTRY_CD,
I3.RIENALID AS LCIN,
I1.RIENSHNA AS GCIN,
I1.RIENNA AS CUST_NAME,
A3.QPRTYCD AS TOP_LMT_PRD_TYPE,
A3.PRCD AS TOP_LMT_PRD_CD,
A4.PRTYDE AS PRD_DESC,
A3.STDA AS FAC_START_DT,
A3.EDDA AS FAC_END_DT,
A5.RITYNA AS RISK_TYPE,
'SGD' AS BASE_CURR_CD,
A5.CUCD AS ACCT_CURR_CD,
SUM(DISTINCT(DECODE(A5.AMTYNA,'APP_FAC_LMT',A5.AM,0))) AS APPR_LMT_ACTUAL,
SUM(DISTINCT(DECODE(A5.AMTYNA,'APP_FAC_LMT',A5.AM_BASE,0))) AS APPR_LMT_BASE,
SUM(DISTINCT(DECODE(A5.AMTYNA,'APP_FAC_LMT',A5.AM_BASE,0))) AS APPR_LMT_SGD,
SUM(DISTINCT(DECODE(A5.AMTYNA,'ACT_FAC_LMT',A5.AM,0))) AS ACT_LMT_ACTUAL,
SUM(DISTINCT(DECODE(A5.AMTYNA,'ACT_FAC_LMT',A5.AM_BASE,0))) AS ACT_LMT_BASE,
SUM(DISTINCT(DECODE(A5.AMTYNA,'ACT_FAC_LMT',A5.AM_BASE,0))) AS ACT_LMT_SGD,
SUM(DISTINCT(DECODE(A5.AMTYNA,'APP_IND_UTIL',A5.AM,0))) AS OUTSTD_AMT_ACTUAL,
SUM(DISTINCT(DECODE(A5.AMTYNA,'APP_IND_UTIL',A5.AM_BASE,0))) AS OUTSTD_AMT_BASE,
SUM(DISTINCT(DECODE(A5.AMTYNA,'APP_IND_UTIL',A5.AM_BASE,0))) AS OUTSTD_AMT_SGD,
SUM(DISTINCT(DECODE(A5.AMTYNA,'APP_IND_UND',A5.AM,0))) AS UNDR_CMMT_ACTUAL,
SUM(DISTINCT(DECODE(A5.AMTYNA,'APP_IND_UND',A5.AM_BASE,0))) AS UNDR_CMMT_BASE,
SUM(DISTINCT(DECODE(A5.AMTYNA,'APP_IND_UND',A5.AM_BASE,0))) AS UNDR_CMMT_SGD
FROM PLP_TSRC_ACR_REPORT_DATES A1
INNER JOIN PLP_TSRC_ACR_FAC_HIER A2 ON TO_CHAR(A2.TIMEIDDATE,'DD-MM-YYYY') = TO_CHAR(A1.CURRTIMEID,'DD-MM-YYYY')
  AND A2.AGGR5BAAPID='ACA'
INNER JOIN PLP_TSRC_ACR_PROD_T A3 ON A2.TIMEID=A3.TIMEID AND A2.AGGR5PRCD=A3.PRCD
INNER JOIN PLP_TSRC_IC_MPT_T A4 ON A4.QPRTYCD=A3.QPRTYCD AND A4.TOTIMEID = 99991231
INNER JOIN PLP_TSRC_ACR_TLEB_FCRS_T A5 ON A5.TIMEID=A2.TIMEID AND A2.AGGR5PRCD=A5.FACPRCD 
  AND A5.RITYNA IN ('LLE','PCE') AND A5.CMFL = 'N'
INNER JOIN PLP_TSRC_IC_REX_T I1 ON I1.RIENSHNA=A5.RRRIENSHNA AND I1.TOTIMEID=99991231
INNER JOIN PLP_TSRC_IC_REUD_T I2 ON I2.RIENGEID=I1.RIENGEID AND I2.UDTYNA = 'Data Source System'
  AND I2.TOTIMEID=99991231 AND I2.UDDA = 'C'
INNER JOIN PLP_TSRC_IC_REAL_T I3 ON I3.RIENGEID=I1.RIENGEID AND A2.TIMEID=I3.TIMEID
  AND I3.ALTYNA = 'SG_CIN_NO'
GROUP BY I3.RIENALID,
  I1.RIENSHNA,
  I1