第四章 运筹帷幄——左右SQL执行计划妙招

参考《收获,不止SQL优化》作者: 梁敬彬 / 梁敬弘

一、左右SQL执行计划的意义

为什么要左右SQL的执行计划?
1、可以在高峰期临时解决问题,避免因收集信息带来的开销。
如果统计信息不准确,影响了执行计划,需要重新收集,而此时业务繁忙,重新收集影响生产,但这条SQL现在又急于优化,这个时候就考虑如何在不影响生产的情况下左右SQL的执行计划。
2、Oracle的bug导致执行计划没有选择最优的那一个,而你知道最优的执行计划,这个时候就可以人工干预了。

二、左右执行计划的方法

在这里插入图片描述

三、习题

习题1:说说你对 hint 的认识。
hint用于强制地改变或者说固定执行计划,但是hint要慎用,因为一旦你使用了hint且生效了,执行计划固定,随着表的数据量变化,其他索引的新增等,可能最优的执行计划已经改变,固定了反而会降低性能。

习题2:说说你对 rownum 实体化视图优化方法表连接的认识。
一个子查询里如果有rownum字段,那么该子查询一定是一起执行,得出个结果集,再与其他表关联等。如果子查询里没有rownum字段,那么子查询里的表不一定一起执行,某些与外面有关联的表可能会先与外表关联。
数据库可能会选择后者作为执行计划,但是效率可能不如前者,为了让子查询里的表一起执行出结果集与外表再关联,就可以考虑用rownum 实体化的方法。

习题3:简要谈谈你对非 hint 方式影响执行计划的认识。
如上图思维导图所示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值