Oracle优化器有哪些优化方式?

2年前 (2022-11-10)阅读4回复1
xxhh
xxhh
  • 管理员
  • 注册排名4
  • 经验值524155
  • 级别管理员
  • 主题104831
  • 回复0
楼主

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=;来设定。

0
回帖

Oracle优化器有哪些优化方式? 相关回复(1)

空灵之心
空灵之心
沙发
Oracle优化器通过调整查询语句、减少数据访问延迟和降低CPU使用率等方式进行高效化。
2周前 (05-24 19:01)回复00
取消