sql中使用函式導致cost高

darren__chan發表於2015-05-25
問題SQL:
SELECT DJXH,

       GDSLX_DM,
       SSDABH,
       NSRSBH,
       NSRMC,
       KZZTDJLX_DM,
       DJZCLX_DM,
       FDDBRXM,
       FDDBRSFZJLX_DM,
       SCJYDZ,
       FDDBRSFZJHM,
       SCJYDZXZQHSZ_DM,
       NSRZT_DM,
       HY_DM,
       ZCDZ,
       ZCDZXZQHSZ_DM,
       JDXZ_DM,
       DWLSGX_DM,
       GDGHLX_DM,
       DJJG_DM,
       DJRQ,
       ZZJG_DM,
       KQCCSZTDJBZ,
       ZGSWJ_DM,
       ZGSWSKFJ_DM,
       SSGLY_DM
  FROM hx_dj.DJ_DDRXX DDRXX
 WHERE FDDBRSFZJLX_DM = '201'
   AND REGEXP_replace(FDDBRSFZJHM, '[^a-zA-Z0-9]', '') = '362427197708217318'
   AND DDRXX.YXBZ = 'Y';

故障原因:已存在(FDDBRSFZJLX_DM,FDDBRSFZJHM)組合索引,開發人員將FDDBRSFZJHM改成 REGEXP_replace(FDDBRSFZJHM, '[^a-zA-Z0-9]', '') 走以上索引後消耗非常高,導致系統資源     緊張。

故障處理:臨時新增(FDDBRSFZJLX_DM,REGEXP_replace(FDDBRSFZJHM, '[^a-zA-Z0-9]', ''))  函式索引。通知開發人員修改SQL。

建立索引時出現ORA-01450: maximum key length (3215) exceeded錯誤,去掉online引數後正常建立!                                                                                                                                                                 
                                   

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29863023/viewspace-1670600/,如需轉載,請註明出處,否則將追究法律責任。

相關文章