1、Oracle优化器的优化体例
Oracle优化器共有两种的优化体例,即基于规则的优化体例(Rule-Based Optimization,简称为RBO)和基于代价的优化体例(Cost-Based Optimization,简称为CBO)。
A、RBO体例:优化器在阐发SQL语句时,所遵照的是Oracle内部预定的一些规则。好比我们常见的,当一个where子句中的一列有索引时去走索引。
B、CBO体例:依词义可知,它是看语句的代价(Cost)了,那里的代价次要指Cpu和内存。
优化器在判断能否用那种体例时,次要参照的是表及索引的统计信息。统计信息给出表的大小、有少行、每行的长度等信息。那些统计信息起初在库内是没有的,是你在做 *** yze后才呈现的,良多的时侯过时统计信息会令优化器做出一个错误的施行方案,因些我们应及时更新那些信息。
在Oracle8及以后的版本,Oracle列保举用CBO的体例。
我们要了然,纷歧定走索引就是优的 ,好比一个表只要两行数据,一次IO就能够完成全表的检索,而此时走索引时则需要两次IO,那时对那个表做全表扫描(full table scan)是更好的。
2、Oracle优化器的优化形式(Optermizer Mode)
优化形式包罗Rule,Choose,First rows,All rows那四种体例,也就是我们以上所提及的。如下我解释一下:
Rule:不消多说,即走基于规则的体例。
Choolse:那是我们应不雅注的,默认的情况下Oracle用的即是那种体例。指的是当一个表或或索引有统计信息,则走CBO的体例,若是表或索引没统计信息,表又不是出格的小,并且响应的列有索引时,那么就走索引,走RBO的体例。
First Rows:它与Choose体例是类似的,所差别的是当一个表有统计信息时,它将是以最快的体例返回查询的更先的几行,从总体上削减了响应时间。
All Rows:也就是我们所说的Cost的体例,当一个表有统计信息时,它将以最快的体例返回表的所有的行,从总体上进步查询的吞吐量。没有统计信息则走基于规则的体例。
3、若何设定选用哪种优化形式
◆A、Instance级别
我们能够通过在init。
ora文件中设定OPTIMIZER_MODE=RULE、OPTIMIZER_MODE=CHOOSE、 OPTIMIZER_MODE=FIRST_ROWS、OPTIMIZER_MODE=ALL_ROWS去选用3所提的四种体例,若是你没设定 OPTIMIZER_MODE参数则默认用的是Choose那种体例。
◆B、Sessions级别
通过SQL> ALTER SESSION SET OPTIMIZER_MODE=;来设定。