客戶發來這樣一條執行時間 1.3小時的SQL 想作優化:sql
SQL代碼:數據庫
INSERT INTO HWDW.TW_CI_SIM_RES (性能優化
......微信
)oracle
SELECT ......性能
FROM HWODS.TO_CI_I91822 S -----大表優化
,(spa
SELECT PHONE_NO,TD_PHONE_NO.net
FROM HWDW.TW_CI_PHONE_TD_INFO-----小表code
WHERE STATIS_DATE = :B1
)T
WHERE S.PHONE_NO = T.TD_PHONE_NO(+);
經過SQL Monitor顯示的數據發現執行計劃不正常:在Estimate-rows估值正常的狀況下,hash join的大表作了左表,這種狀況通常是相關參數作了改動。
果真,檢查發現,_right_outer_hash_enable 隱含參數被改爲了false 。若是將參數改回默認的TRUE,預計SQL性能會提高10倍左右。
說明:
若是設置了 _right_outer_hash_enable=false ,那麼外關聯只能是主表作hash join的左表,而不考慮表的大小,在主表較大,關聯表小的狀況下,性能會比較差。
這種參數可能在之前的某個版本有bug,客戶升級時仍保留了原來設置的值,建議升級時逐一確認各參數,使數據庫達到最佳性能。
本文分享自微信公衆號 - 老虎劉談oracle性能優化(sql_tigerliu)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。