客户发来这样一条执行时间 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,客户升级时仍保留了原来设置的值,建议升级时逐一确认各参数,使数据库达到最佳性能。
本文分享自 老虎刘谈oracle性能优化 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!