精简之道、驱动为王、集合为本
精简之道
大道至简、简单即高效、复杂的事情简单化同样适用SQL优化,SQL优化大师说过:不要让oracle做多余的事。对于oracle而言,多余的事情是什么呢?多余的表关联、重复的表访问、冗余的关联(过滤)条件、不必要的distinct\order by\group by、曲折的访问路径,虽然oracle优化器引擎也在努力识别并消除这些多余的事,然而在面对复杂的SQL时,oracle往往也束手无策,因此SQL优化的首要策略就是精简SQL,这里可学习网上博客的oracle的执行计划。
驱动为王
有这样一句话:一头狮子领着一群羊,要胜过一群羊领着一群狮子。这就是领头的重要性,在oracle优化器中,就是“驱动表”,驱动表的意义如木楔子,只有薄如纸锐如刀刃才能轻易插入坚硬的木桩,如果给你根圆木力量再大也无济于事。这就要求驱动表的数据量足够少,尽管oracle优化器也在努力寻找合适的“驱动表”,而有的时候,oracle优化器会被腰里别着枪的老鼠给骗了。关于驱动表的优化案例网上有很多,这里就不举例说明。
集合为本
集合操作是二维关系数据库引擎在数据处理时的根本,单表是一个集合,多表关联后的结果也是一个集合,视图、子查询的返回结果还是一个集合,整个SQL执行完后的结果仍然是一个集合。因此,一个高效的SQL一定有一个合理的集合运算结构,根据业务需求结合代码逻辑,有的时候需要将代码片通过子查询封装,而有的时候又需要将子查询合并到主查询中,有的时候需要将大集合根据业务逻辑切片成多个小的集合,有时候又需要将若干个小的集合预先合并成大集合,总之在进行SQL优化时,一定要有集合的概念,用集合的思维指导SQL优化。