参考《收获,不止SQL优化》作者: 梁敬彬 / 梁敬弘
一、左右SQL执行计划的意义
为什么要左右SQL的执行计划?
1、可以在高峰期临时解决问题,避免因收集信息带来的开销。
如果统计信息不准确,影响了执行计划,需要重新收集,而此时业务繁忙,重新收集影响生产,但这条SQL现在又急于优化,这个时候就考虑如何在不影响生产的情况下左右SQL的执行计划。
2、Oracle的bug导致执行计划没有选择最优的那一个,而你知道最优的执行计划,这个时候就可以人工干预了。
二、左右执行计划的方法
三、习题
习题1:说说你对 hint 的认识。
hint用于强制地改变或者说固定执行计划,但是hint要慎用,因为一旦你使用了hint且生效了,执行计划固定,随着表的数据量变化,其他索引的新增等,可能最优的执行计划已经改变,固定了反而会降低性能。
习题2:说说你对 rownum 实体化视图优化方法表连接的认识。
一个子查询里如果有rownum字段,那么该子查询一定是一起执行,得出个结果集,再与其他表关联等。如果子查询里没有rownum字段,那么子查询里的表不一定一起执行,某些与外面有关联的表可能会先与外表关联。
数据库可能会选择后者作为执行计划,但是效率可能不如前者,为了让子查询里的表一起执行出结果集与外表再关联,就可以考虑用rownum 实体化的方法。
习题3:简要谈谈你对非 hint 方式影响执行计划的认识。
如上图思维导图所示