首页 > 数据库 >5.Oracle的优化器

5.Oracle的优化器

时间:2023-01-04 21:45:59浏览次数:50  
标签:OPTIMIZER 方式 索引 MODE Oracle 优化

1.oracle的优化器

  优化器(optimizer)是oracle数据库内置的一个核心子系统。优化器的目的是按照一定的判断原则来得到它认为的目标SQL在当前的情形下的最高效的执行路径,也就是为了得到目标SQL的最佳执行计划。依据所选择执行计划时所用的判断原则,oracle数据库里的优化器又分为RBO(基于原则的优化器)和CBO(基于成本的优化器,SQL的成本根据统计信息算出)两种。

2.Oracle的优化器种类

  Oracle的优化器共有两种的优化方式,即基于规则的优化方式(Rule-Based Optimization,简称为RBO)和基于代价的优化方式(Cost-Based Optimization,简称为CBO)。

  A、RBO方式:优化器在分析SQL语句时,所遵循的是Oracle内部预定的一些规则。比如我们常见的,当一个where子句中的一列有索引时去走索引。8i之前版本

  B、CBO方式:依词义可知,它是看语句的代价(Cost)了,这里的代价主要指Cpu和内存。优化器在判断是否用这种方式时,主要参照的是表及索引的统计信息。统计信息给出表的大小 、有多少行、每行的长度等信息。这些统计信息起初在库内是没有的,是你在做analyze后才出现的,很多的时侯过期统计信息会令优化器做出一个错误的执行计划,因些我们应及时更新这些信息。在Oracle8及以后的版本,Oracle列推荐用CBO的方式。

3.优化器的优化模式(Optermizer Mode)

   优化模式包括Rule,Choose,First rows,All rows这四种方式,也就是我们以上所提及的

  • Rule:不用多说,即走基于规则的方式
  • Choose:这是我们应观注的,默认的情况下Oracle用的便是这种方式。指的是当一个表或索引有统计信息,则走CBO的方式,如果表或索引没统计信息,表又不是特别的小,而且相应的列有索引时,那么就走索引,走RBO的方式 
  • First Rows:它与Choose方式是类似的,所不同的是当一个表有统计信息时,它将是以最快的方式返回查询的最先的几行,从总体上减少了响应时间。
  • All Rows:也就是我们所说的Cost的方式,当一个表有统计信息时,它将以最快的方式返回表的所有的行,从总体上提高查询的吞吐量。没有统计信息则走基于规则的方式

4.如何设定优化器模式?

  4.1 参数设置:可以通过在init<SID>.ora文件中设定OPTIMIZER_MODE=RULE、OPTIMIZER_MODE=CHOOSE、OPTIMIZER_MODE=FIRST_ROWS、OPTIMIZER_MODE=ALL_ROWS去选用3所提的四种方式,如果你没设定OPTIMIZER_MODE参数则默认用的是Choose这种方式

  4.2 会话设置:通过SQL> ALTER SESSION SET OPTIMIZER_MODE=<Mode>;来设定

  4.3 语句级别设置: 这些需要用到Hint

补充语句:

-- 用这个语句查看某张表上的各个字段的可选性selectivity(选择性越高,越适合B-tree索引,选择性越低,越不适合做B-tree索引)
-- 选择性目的主要是为建立索引
select column_name,num_distinct from USER_TAB_COL_STATISTICS where TABLE_NAME='TEST' ORDER BY 2 DESC;

 

标签:OPTIMIZER,方式,索引,MODE,Oracle,优化
From: https://www.cnblogs.com/zmc60/p/17026085.html

相关文章