`

oracle的RBO/CBO优化器

 
阅读更多

 

        Oracle的优化器有两种优化方式,即基于规则的优化方式(Rule-Based Optimization,简称为RBO)和基于代价的优化方式(Cost-Based Optimization,简称为CBO),在Oracle8及以后的版本,Oracle强列推荐用CBO的方式

 

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

 

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

 

注意:走索引不一定就是优的,比如一个表只有两行数据,一次IO就可以完成全表的检索,而此时走索引时则需要两次IO,这时全表扫描(full table scan)是最好

 

优化模式包括Rule、Choose、First rows、All rows四种方式:

 

Rule:基于规则的方式。

 

Choolse:默认的情况下Oracle用的便是这种方式。指的是当一个表或索引有统计信息,则走CBO的方式,如果表或索引没统计信息,表又不是特别的小,而且相应的列有索引时,那么就走索引,走RBO的方式。

 

First Rows:它与Choose方式是类似的,所不同的是当一个表有统计信息时,它将是以最快的方式返回查询的最先的几行,从总体上减少了响应时间。

 

All Rows:也就是我们所说的Cost的方式,当一个表有统计信息时,它将以最快的方式返回表的所有的行,从总体上提高查询的吞吐量。没有统计信息则走RBO的方式。

 

设定选用哪种优化模式:

 

A、Instance级别我们可以通过在initSID.ora文件中设定OPTIMIZER_MODE=RULE/CHOOSE/FIRST_ROWS/ALL_ROWS如果没设定OPTIMIZER_MODE参数则默认用的是Choose方式。


B、Sessions级别通过ALTER SESSION SET OPTIMIZER_MODE=RULE/CHOOSE/FIRST_ROWS/ALL_ROWS来设定。


C、语句级别用Hint(/*+ ... */)来设定

 

为什么表的某个字段明明有索引,但执行计划却不走索引?

1、优化模式是all_rows的方式
2、表作过analyze,有统计信息
3、表很小,上文提到过的,Oracle的优化器认为不值得走索引。

分享到:
评论

相关推荐

    ORACLE CBO RBO 优化

    ORACLE CBO RBO 优化

    Oracle的RBO和CBO详细介绍和优化模式设置方法

    优化器主要有两种策略:基于规则的优化(RBO)和基于代价的优化(CBO)。理解这两种优化方式以及如何设置优化模式对于数据库管理员和开发人员来说至关重要。 **RBO(基于规则的优化)**: RBO是早期Oracle版本中...

    Oracle优化器介绍

    Oracle 优化器可以分为两大类:基于规则的优化器(RBO)和基于成本的优化器(CBO)。 基于规则的优化器(RBO) RBO 是一种 Based on Rule 的优化器,根据可用的访问路径和访问路径的等级来选择执行计划。RBO 访问...

    Oracle语句优化53个规则详解

    2. **基于成本的优化器(COST)**:这是Oracle默认使用的优化器,它根据数据库对象的统计信息来计算最优的执行计划。为了使基于成本的优化器能够准确地工作,需要定期运行`ANALYZE`命令来收集对象统计信息。 3. **...

    CBO,RBO在ORACLE中的应用

    CBO自Oracle 7引入,但在Oracle 8i时达到成熟,并在Oracle 9i及以后的版本中逐渐取代RBO成为主要的优化器。RBO基于固定的规则来生成执行计划,而CBO则通过评估各种可能执行计划的成本来选择最佳方案。 CBO的主要...

    Oracle优化器介绍(精简完善版).doc

    Oracle优化器经历了从基于规则的优化器(RBO)到基于成本的优化器(CBO)的演变,这一转变显著提升了性能优化能力。 #### RBO与CBO对比 **RBO (Rule-Based Optimizer)**是一种早期的优化技术,它依据预定义的规则集来...

    ORACLE19c数据库性能优化说明.docx

    从Oracle 10g开始,RBO(基于规则的优化器)已被淘汰,现在主要使用CBO(基于成本的优化器),它会根据表的物理大小、索引状态等信息来估算成本,选择最低成本的执行计划。 索引是提升查询性能的关键手段。B-tree...

    ORACLE数据库中SQL优化解析.pdf

    优化器有两种类型:基于规则的优化器(RBO)和基于代价的优化器(CBO)。RBO主要根据预定义的规则进行优化决策,而CBO则根据统计信息来评估不同执行路径的成本,进而选择成本最低的执行路径。由于RBO的局限性,...

    Oracle的优化器(Optimizer)

    ### Oracle的优化器(Optimizer)详解 #### 一、Oracle优化器概述 在Oracle数据库中,每当执行SQL语句时,系统首先需要确定最佳的执行路径或计划,这一过程由**优化器(Optimizer)**负责。优化器的主要任务是评估SQL...

    Oracle中SQL优化器的两种优化方式及使用.pdf

    本文主要介绍Oracle中SQL优化器的两种优化方式:基于规则的优化器(Rule-Based Optimizer, RBO)和基于成本的优化器(Cost-Based Optimizer, CBO),以及这两种方式在实际应用中的具体使用。 一、分析SQL语句的执行过程...

    Oracle实战优化器

    优化器根据不同的策略可以分为两种类型:基于规则的优化器(Rule Based Optimizer, RBO)和基于成本的优化器(Cost Based Optimizer, CBO)。这两种优化器的选择和使用直接影响了SQL语句的性能表现。 #### 二、基于规则...

    ORACLE存储过程性能优化技巧

    本文将详细介绍两种优化器(RBO与CBO)的概念及其优缺点,并提供具体的性能优化技巧。 #### 二、ORACLE优化器 ##### 1. **RBO (Rule Based Optimizer, 基于规则的优化器)** - **基本原理**:RBO优化器的工作原理...

    【oracle】oracle查询优化改写

    Oracle有多种优化器,如RBO(Rule-Based Optimizer,基于规则的优化器)和CBO(Cost-Based Optimizer,基于成本的优化器)。CBO是现代Oracle数据库的默认优化器,它通过估算不同执行计划的成本来选择最优路径。这个...

    Oracle数据库优化详解

    从Oracle 10g版本开始,原有的基于规则的优化器(RBO)不再受到支持,因此所有老版本Oracle数据库在升级过程中都需要将优化器从RBO迁移到CBO。 在Oracle数据库优化过程中,以下几个方面是重点需要关注的: 1. CBO...

    小菜鸟系列-Oracle的优化器与hint

    Oracle提供了多种类型的优化器,包括基于规则的优化器(RBO)和基于成本的优化器(CBO)。然而,CBO是现代Oracle版本中的默认选择,因为它能根据统计信息和实际系统资源消耗来评估执行计划的成本。 CBO依赖于统计...

    Oracle9i优化器介绍

    Oracle9i包含两种主要的优化器:成本基于(Cost-Based Optimizer, CBO)和规则基于(Rule-Based Optimizer, RBO)。CBO是默认的优化器,它通过估算不同执行计划的成本来决定最佳路径,而RBO则依赖于预定义的规则和...

    oracle9i优化器介绍

    ### Oracle9i优化器深入解析 #### 一、优化器目标的选择 在Oracle9i数据库系统中,优化器的目标选择至关重要,它直接影响着查询的执行效率。优化器目标主要分为两类:最佳吞吐量(All_Rows)和最快响应速度(First...

    oracle优化-SQL优化

    1. Oracle提供了两种优化器,分别是基于规则的优化器(RBO)和基于代价的优化器(CBO)。在Oracle 8及以后的版本中,CBO是被推荐的优化方式。 2. RBO主要根据Oracle内部预定的一些规则来优化SQL语句,比如当where子句中...

Global site tag (gtag.js) - Google Analytics