客戶發來這樣一條執行時間 1.3小時的SQL 想做優化:

SQL代碼:
INSERT INTO HWDW.TW_CI_SIM_RES (
......
)
SELECT ......
FROM HWODS.TO_CI_I91822 S -----大表
,(
SELECT PHONE_NO,TD_PHONE_NO
FROM HWDW.TW_CI_PHONE_TD_INFO-----小表
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,客戶更新時仍保留了原來設定的值,建議更新時逐一确認各參數,使資料庫達到最佳性能。