Oracle优化器

Oracle数据库中的优化器又叫查询优化器(Query Optimizer)。它是SQL分析和执行的优化工具,它负责生成、制定SQL的执行计划。Oracle的优化器有两种,基于规则的优化器(RBO)与基于代价的优化器(CBO)

RBO: Rule-Based Optimization 基于规则的优化器

CBO: Cost-Based Optimization 基于代价的优化器

RBO自ORACLE 6以来被采用,一直沿用至ORACLE 9i. ORACLE 10g开始,ORACLE已经彻底丢弃了RBO,它有着一套严格的使用规则,只要你按照它去写SQL语句,无论数据表中的内容怎样,也不会影响到你的“执行计划”,也就是说RBO对数据不“敏感”;它根据ORACLE指定的优先顺序规则,对指定的表进行执行计划的选择。比如在规则中,索引的优先级大于全表扫描;RBO是根据可用的访问路径以及访问路径等级来选择执行计划,在RBO中,SQL的写法往往会影响执行计划,它要求开发人员非常了解RBO的各项细则,菜鸟写出来的SQL脚本性能可能非常差。随着RBO的被遗弃,渐渐不为人所知。也许只有老一辈的DBA对其了解得比较深入。

CBO是一种比RBO更加合理、可靠的优化器,它是从ORACLE 8中开始引入,但到ORACLE 9i 中才逐渐成熟,在ORACLE 10g中完全取代RBO, CBO是计算各种可能“执行计划”的“代价”,即COST,从中选用COST最低的执行方案,作为实际运行方案。它依赖数据库对象的统计信息,统计信息的准确与否会影响CBO做出最优的选择。如果对一次执行SQL时发现涉及对象(表、索引等)没有被分析、统计过,那么ORACLE会采用一种叫做动态采样的技术,动态的收集表和索引上的一些数据信息。

CBO V.S. RBO

CBO优于RBO是因为RBO是一种呆板、过时的优化器,它只认规则,对数据不敏感。毕竟规则是死的,数据是变化的,这样生成的执行计划往往是不可靠的,不是最优的。

CBO

CBO优化器根据SQL语句生成一组可能被使用的执行计划,估算出每个执行计划的代价,并调用计划生成器(Plan Generator)生成执行计划,比较执行计划的代价,最终选择选择一个代价最小的执行计划。查询优化器由查询转换器(Query Transform)、代价估算器(Estimator)和计划生成器(Plan Generator)组成。

CBO优化器组件

查询转化器(Query Transformer)

查询转换器的作用就是等价改变查询语句的形式,以便产生更好的执行计划。它决定是否重写用户的查询(包括视图合并、谓词推进、非嵌套子查询/子查询反嵌套、物化视图重写),以生成更好的查询计划。

代价评估器(Estimator)

评估器通过复杂的算法结合来统计信息的三个值来评估各个执行计划的总体成本:选择性(Selectivity)、基数(Cardinality)、成本(Cost)计划生成器会考虑可能的访问路径(Access Path)、关联方法和关联顺序,生成不同的执行计划,让查询优化器从这些计划中选择出执行代价最小的一个计划。

计划生成器(Plan Generator)

计划生成器就是生成大量的执行计划,然后选择其总体代价或总体成本最低的一个执行计划。由于不同的访问路径、连接方式和连接顺序可以组合,虽然以不同的方式访问和处理数据,但是可以产生同样的结果

查看Oracle优化器

需要用户权限。

修改Oracle优化器

ORACLE 10g 优化器可以从系统级别、会话级别、语句级别三种方式修改优化器模式,非常方便灵活。

其中optimizer_mode可以选择的值有: first_rows_n,all_rows.  其中first_rows_n又有first_rows_1000, first_rows_100, first_rows_10, first_rows_1

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

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

系统级别

会话级别

语句级别

使用Hint来实现:

例如:

SQL> select /*+ rule */ * from dba_objects where rownum <= 10;

将oracle优化器改为CBO,【DB.Oracle】Oracle 优化器 (RBO, CBO)相关推荐

  1. oracle成本cbo,基于成本的优化器(CBO)

    本短文着意于消除一些关于基于成本的优化器(CBO)的错误说法,强调一般的错误和问题. Background 背景 ~~~~~~~~~~ 为了执行任何一个SQL语句,Oracle都要先导出一个" ...

  2. 【Oracle】看懂执行计划之基于规则的优化器(RBO)

    [Oracle]看懂执行计划之基于规则的优化器(RBO) 简介   基于规则的优化器(RBO)是通过编码在 Oracle 数据库中的一系列固定的规则,来决定目标 SQL 的执行计划.Oracle 事先 ...

  3. oracle的优化适用于mysql吗_性能优化之数据库优化,适用于Sqlite、Mysql、Oracle、Sql server,详细介绍了索引和事务及部分针对Sqlite的优化...

    本文为性能优化的第一篇--数据库性能优化,原理适用于大部分数据库包括Sqlite.Mysql.Oracle.Sql server,详细介绍了索引(优缺点.分类.场景.规则)和事务,最后介绍了部分单独针 ...

  4. Oracle执行计划filter下多个节点的优化

    Oracle执行计划filter下多个节点的优化 FILTER操作是执行计划中常见的操作,这种操作有两种情况: l 只有一个子节点,那么就是简单过滤操作. l有多个子节点,那么就是类似NESTED L ...

  5. oracle 主机名改ip,[oracle 10.2]主机名或者IP地址改变造成的dbconsole服务无法启动解决...

    最近在使用oracle时发现当主机Ip地址更改后,dbconsole服务无法启动.在网上搜了一些文章,加上自己的摸索,如下这篇文章的方法帮我解决了问题.贴出来给大家参考. 注: 1,第2步中的那些dr ...

  6. Linux平台 Oracle 18c RAC安装Part3:DB配置

    四.DB(Database)配置 4.1 解压DB的安装包 4.2 DB软件配置 4.3 ASMCA创建磁盘组 4.4 DBCA建库 4.5 验证crsctl的状态 Linux平台 Oracle 18 ...

  7. 袋鼠云数栈基于CBO在Spark SQL优化上的探索

    原文链接:袋鼠云数栈基于CBO在Spark SQL优化上的探索 一.Spark SQL CBO选型背景 Spark SQL的优化器有两种优化方式:一种是基于规则的优化方式(Rule-Based Opt ...

  8. Spark优化篇:RBO/CBO

    ​​​​​​     在Spark1.0中所有的Catalyst Optimizer都是基于规则 (rule) 优化的.为了产生比较好的查询规 则,优化器需要理解数据的特性,于是在Spark2.0中引 ...

  9. oracle数据优化面试题,面试中回答关于oracle数据库优化的方法

    2015-08-16 06:30:01 阅读( 470 ) 1关于优化器的优化配置 介绍oracle数据库优化的基本方式,基于规则的优化,基于规则包括全表扫描,扫描第一行 (需要上网查看一下) 基于成 ...

最新文章

  1. java 简单数据类型_java基本数据类型
  2. winpe装双系统linux_使用syslinux在u盘安装pubbylinux和winpe双系统
  3. Google Maps API 调用实例
  4. java代码发送请求并传参_如何优化您的请求请求并使代码审核人员满意
  5. httpsecurity 类方法介绍_java知识学习25-内部类 - 那种意境
  6. 软件集成测试工作流程指南
  7. 考研倒计时一幕刷屏!网友:这一定是最接近梦想的人!
  8. Pytorch 操作整理
  9. 极力推荐收藏的几个高清免费图片素材网站
  10. JS设计模式 - 单例模式
  11. win10系统如何查询本机的IP地址和外网IP地址
  12. git checkout -b
  13. Git和Gitlab协同工作
  14. 在虚拟机里通过U盘引导安装Win10教程
  15. python输入名字配对情侣网名_名字匹配度情侣,打出自己的名字和对象的名字
  16. 极兔崛起,顺丰受伤,低端快递市场不好玩
  17. MarkDown生成目录索引
  18. Win10(家庭版)修改中文用户名为英文
  19. 毕业设计-基于 MATLAB 的图像分割算法研究及实现
  20. 【FreeRTOS(七)】软件定时器

热门文章

  1. 初探语音识别ASR算法
  2. 华为云联合HarmonyOS发布智联生活行业加速器
  3. 详解API Gateway流控实现,揭开ROMA平台高性能秒级流控的技术细节
  4. 万字长文:解读区块链7类共识算法
  5. 【华为云技术分享】《跟唐老师学习云网络》—我的网络概念
  6. Java增强型for
  7. 如何处理word中字体和公式不在同一水平线上
  8. combinatorial_identities习题1.1分析与解答
  9. leetcode第21题: 合并两个有序链表
  10. C语言_选择结构的程序设计