部分内容引自 Oracle优化器的优化方式和优化模式-性能调优
http://www.cnblogs.com/sopost/archive/2010/12/21/2190066.html
书 <<收获,不止Oracle>> 作者梁敬彬。
以前做过生产运行环境慢的问题定位与调优,记忆中影响最大的部分在Oracle数据库。
Oracle的种种问题会导致应用产生性能问题:
数据库服务器操作系统的版本问题(32位或者64位等),
oracle的版本问题(32位或者64位、10g、11g等),
数据表的关键列索引没建,
表空间不足了,
数据库服务器IP地址冲突了,
数据库表设计不合理,
DBA没有建好rac等等。
这篇文章介绍一下Oracle优化器方面的知识,可能只与上面所列条目的索引建立有关系。
索引的概念应用广泛:图书馆图书编目、编码,电视节目列表,文件系统的树形结构编目,全文搜索与搜索引擎也通过建立索引提高检索效率等等。
Oracle索引就是对数据库表中一列或多列的值进行排序的一种结构。
Oracle索引有三种类型: B-Tree索引,位图索引,函数索引。
通常应用较多的是B-Tree索引。
按照常人的理解,当只需要检索数据表中少量数据时,应用索引是可以提高速度的(比如修改某一条记录,查询某几条记录);但是当要检索大量数据时(比如从100万记录中查询出30万条),索引应该不起什么作用。
对应现实阅读书籍的例子来理解就容易了:当只要查看书籍中某个理论的内容时翻看一下目录,找到具体页数,然后去阅读,非常方便;但是当一本书的很多内容都有吸引力时,我最可能会从头到尾阅读一遍。
当然现实生活中阅读书籍的模式并不只是这两种,如:我对书籍中很多概念都有兴趣,我可能会翻看目录来一一检索查看。
Oracle数据库也有同样的问题:虽然索引号称比较快,但是索引实际的检索效率可能不如别的检索方式。那么Oracle是如何处理这种种情况的呢?
Oracle优化器就是用来权衡检索效率的。
Oracle优化器(Optimizer)主要工作是分析语句的执行计划。
Oracle优化器有两种优化方式: RBO(Rule-Based Optimization) 基于规则的优化, CBO(Cost-Based Optimization)基于代价的优化。
当采用RBO方式时:优化器在分析SQL语句时遵循Oracle内部预定的一些规则,如where 字句中某条件列有索引则走索引等。
当采用CBO方式时:优化器在分析SQL语句参照的是表及索引的统计信息。
Oracle优化器的模式有四种:Rule, Choose, First Rows, All Rows。
Rule既是走RBO方式。
Choose是指当一个表或索引有统计信息则走CBO方式,反之并且表不是特别小且有索引则走RBO方式。Choose模式是Oracle的默认优化器模式。
First Rows与Choose方式是类似的,所不同的是当一个表有统计信息时,它将是以最快的方式返回查询的最先的几行,从总体上减少了响应时间。
All Rows:也就是我们所说的Cost方式,当一个表有统计信息时,它将以最快的方式返回表的所有的行,从总体上提高查询的吞吐量。没有统计信息则走基于规则的方式。
优化器模式的设定:
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。
本文要说明的核心思想是: Oracle并不认为SQL语句走索引就是最优的,这和现实生活中阅读书籍有异曲同工之妙。
但是话又说回来:对于普通的应用,表的索引添加是必须的。因为如果表没有索引,Oracle优化器就陷入巧妇难为无米之炊的境地。
分享到:
相关推荐
ORACLE CBO RBO 优化
Oracle的优化器有两种优化方式,即基于规则的优化方式(Rule-Based Optimization,简称为RBO)和基于代价的优化方式(Cost-Based Optimization,简称为CBO),在Oracle8及以后的版本,Oracle强列推荐用CBO的方式 RBO方式:...
CBO,RBO在ORACLE中的应用
4.1 rbo基于规则的优化器 66 4.2 cbo基于成本的优化器 69 第5章 执行计划 85 5.1 cardinality (基数) 85 5.2 sql的执行计划 94 第6章 hint 109 6.1 和优化器相关的hint 115 6.1.1 all_rows和first_rows(cbo) 115 ...
ORACLE的优化器共有3种: a. RULE (基于规则rbo) b. COST (基于成本cbo) c. CHOOSE (选择性) 设置缺省的优化器,可以通过对init.ora文件中 OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS...
4.1 rbo基于规则的优化器 66 4.2 cbo基于成本的优化器 69 第5章 执行计划 85 5.1 cardinality (基数) 85 5.2 sql的执行计划 94 第6章 hint 109 6.1 和优化器相关的hint 115 6.1.1 all_rows和first_rows(cbo) 115 ...
Oracle_SQL优化 Oracle的优化器有两种方式,一种是基于规则的优化方式(RBO),另外一种是基于代价的优化方式(CBO),Oracle推荐在oracle8以后的版本强烈推荐使用CBO的方式。
§14.1 Oracle优化器 170 §14.2 SQL处理体系结构 171 §14.2.1 解析程序 171 §14.2.2 优化程序 172 §14.2.3 行源程序产生器 172 §14.2.4 SQL执行 172 §14.3 EXPLAIN PLAN 172 §14.4 选择优化器路径及目标 172 ...
依据所选择执行计划时所用的判断原则,oracle数据库里的优化器又分为RBO和CBO两种。 一、基于规则的优化器。《RBO: Rule-Based Optimization》 Oracle会在代码里事先为各种类型的执行路径定一个等级,一共15个等级...
oracle数据库执行计划文档,描述了cbo,rbo等优化方式,以及数据库执行计划的稳定性
在optimizer_mode=choose时,如果表有统计信息(分区表外),优化器将选择CBO,否则选RBO。RBO遵循简单的分级方法学,使用15种级别要点,当接收到查询,优化器将评估使用到的要点数目, 然后选择最佳级别(最少的数量)的...
本文介绍了SQL的执行过程,ORACLE优化器的基本原理,优化器的选择和应用,以及如何建立 和管理索引来提高程序的执行效率。并以实际工作经验介绍了优化工具以及提出对SQL优化的体会。
RBO文件加密_V1.0.0
1. 基于规则的优化器-- Rule Based (Heuristic) Optimization(简称RBO) 2. 基于代价的优化器 -- Cost Based Optimization(简称CBO) 3. 判断当前数据库使用何种优化器—CHOOSE 4. 如何设定选用哪种优化模式 访问...
1.设置最大文件长度,2.生成密钥,3.加密(明文->密文),4.解密(密文->明文)
高级SQL优化教程 pdf 文档,分五部分: 第一部分:细说RBO和CBO 第二部分:理解RBO 第三部分:SQL调整背景知识 。。。。。。
Oracle10g起,在基于CBO的优化器模式下Oralce会进行自动优化,但在基于RBO(基于规则)的优化器模式下,依然保持此规则。1.索引对不等号和NOT的限制RBO模式下,执行计划如下:1.索引对不等号和NOT的限制RBO模式下,...