在很多人眼里,SQL优化就是走索引,就是用走索引来取代全表扫描。实际上这种认识是非常肤浅的。尽管大部分SQL优化的问题都可以通过增加或者减少索引的方式来解决,但这绝不是全部”!
Oracle SQL优化方法论
据崔华老师介绍,Oracle数据库里SQL优化的终极目标就是要缩短目标SQL语句执行时间。要达到上述目的,我们通常只有如下三种方法可以选择:
降低目标SQL语句的资源消耗;
并行目标SQL语句;
平衡系统的资源消耗。
针对以上三种方法,崔华老师分别作出了详细的阐述。崔华老师认为,“方法1:降低目标SQL语句的资源消耗”以缩短执行时间,这是最常用的SQL优化方法。
这种方法的核心是要么通过在不更改业务逻辑的情况下改写SQL来降低目标SQL语句的资源消耗,要么不改SQL但通过调整执行计划或相关表的数据来降低目标SQL语句的资源消耗。
方法1所涉及到的这两种优化手段在Oracle数据库中能否奏效以及效果的好坏与否很大程度上取决于对CBO和执行计划的理解程度,对CBO和执行计划理解的越深,这两种优化手段的应用就会越纯熟,效果就会越好。
方法1也正是崔华老师新书中所要提出的Oracle数据库里SQL优化方法论的第一点:Oracle里SQL优化的本质是基于对CBO和执行计划的深刻理解。
“方法2:并行执行目标SQL语句”,这实际上是以额外的资源消耗来换取执行时间的缩短,很多情况下使用并行是针对某些SQL的唯一优化手段。
“方法3:平衡系统的资源消耗” 可以避免不必要的资源争用所导致的目标SQL语句执行时间的增长。
其实从以上内容我们不难总结出,崔华老师所讲的针对Oracle数据库SQL优化的主要在于,对CBO和执行计划的深刻理解,以及做SQL优化不能脱离实际的业务。