Oracle optimizerITeye - 亚美娱乐

Oracle optimizerITeye

2019年03月13日14时55分44秒 | 作者: 运浩 | 标签: 优化,方法,计算 | 浏览: 1038

Oracle 在履行SQL句子时,有两种优化办法:即根据规矩的RBO和根据价值的CBO。 在SQL执教的时分,究竟选用何种优化办法,就由Oracle参数 optimizer_mode 来决议。

SQL show parameter optimizer_mode

NAME                                  TYPE         VALUE

-

optimizer_mode                        string       CHOOSE

optimizer_mode 参数值共有以下四个:

榜首:CHOOSE


   这个是Oracle的默许值。选用这个值时,Oracle即能够选用根据规矩RBO,也能够选用根据价值的CBO,究竟运用那个值,取决于当时SQL的被拜访的表中是不是有能够运用的计算信息。

     假如有多个被拜访的表,其中有一个或多个有计算信息,那么Oralce会对没有计算信息的表进行采样计算(即不悉数采样),计算完结后,运用根据价值的优化办法CBO。

    假如一切被拜访的表都没有计算信息,Oracle就会选用根据规矩的优化办法RBO。


第二:ALL_ROWS


不论是不是有计算信息,悉数选用根据本钱的优化办法CBO。


第三:FIRST_ROWS_n


不论是不是有计算信息,悉数选用根据本钱的优化办法CBO,并以最快的速度,回来前N行记载。


第四:FIRST_ROWS


运用本钱和试探法相结合的办法,查找一种能够最快回来前面少量行的办法;这个参数首要用于向后兼容。


第五:RULE


这个参数正好和ALL_ROWS相反,不论是不是计算信息,悉数选用根据规矩的优化办法。


怎么更改 optimizer_mode 的参数呢?能够用以下的办法。

SQL alter session set optimizer_mode=RULE;

会话已更改。

 

/*******************************************************

/*******************************************************

/*******************************************************

解说Oracle优化器的优化方法和优化形式

在履行一个SQL之前,首先要剖析一下句子的履行计划,然后再按履行计划去履行。剖析句子的履行计划的作业是由优化器(Optimizer)来完结的。不同的状况,一条SQL可能有多种履行计划,但在某一时点,必定只要一种履行计划是最优的,花费时刻是最少的。相信你必定会用Pl/sql Developer、Toad等东西去看一个句子的履行计划,不过你可能对Rule、Choose、First rows、All rows这几项有疑问,由于我最初也是这样的,那时我也疑问为什么选了以上的不同的项,履行计划就变了?

1、优化器的优化方法

Oracle的优化器共有两种的优化方法,即根据规矩的优化方法(Rule-Based Optimization,简称为RBO)和根据价值的优化方法(Cost-Based Optimization,简称为CBO)。

A、RBO方法:优化器在剖析SQL句子时,所遵从的是Oracle内部预订的一些规矩。比方咱们常见的,当一个where子句中的一列有索引时去走索引。

B、CBO方法:依词义可知,它是看句子的价值(Cost)了,这儿的价值首要指Cpu和内存。优化器在判别是否用这种方法时,首要参照的是表及索引的计算信息。计算信息给出表的巨细 、有少行、每行的长度等信息。这些计算信息起先在库内是没有的,是你在做analyze后才呈现的,许多的时侯过期计算信息会令优化器做出一个过错的履行计划,因些咱们应及时更新这些信息。在Oracle8及今后的版别,Oracle列引荐用CBO的方法。

咱们要明晰,不必定走索引就是优的 ,比方一个表只要两行数据,一次IO就能够完结全表的检索,而此刻走索引时则需求两次IO,这时对这个表做全表扫描(full table scan)是最好的。

2、优化器的优化形式(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=;来设定。

◆C、句子等级

这些需求用到Hint,比方:

 

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表亚美娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章