客户发来这样一条执行时间 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源创计划”,欢迎正在阅读的你也加入,一块儿分享。