知识大全 讲解Oracle优化器的优化方式和优化模式

Posted 索引

篇首语:历览千载书,时时见遗烈。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 讲解Oracle优化器的优化方式和优化模式相关的知识,希望对你有一定的参考价值。

讲解Oracle优化器的优化方式和优化模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  Oracle在执行一个SQL之前 首先要分析一下语句的执行计划 然后再按执行计划去执行 分析语句的执行计划的工作是由优化器(Optimizer)来完成的 不同的情况 一条SQL可能有多种执行计划 但在某一时点 一定只有一种执行计划是最优的 花费时间是最少的 相信你一定会用Pl/sql Developer Toad等工具去看一个语句的执行计划 不过你可能对Rule Choose First rows All rows这几项有疑问 因为我当初也是这样的 那时我也疑惑为什么选了以上的不同的项 执行计划就变了?

   优化器的优化方式

  

  Oracle的优化器共有两种的优化方式 即基于规则的优化方式(Rule Based Optimization 简称为RBO)和基于代价的优化方式(Cost Based Optimization 简称为CBO)

  

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

  

  B CBO方式 依词义可知 它是看语句的代价(Cost)了 这里的代价主要指Cpu和内存 优化器在判断是否用这种方式时 主要参照的是表及索引的统计信息 统计信息给出表的大小 有少行 每行的长度等信息 这些统计信息起初在库内是没有的 是你在做analyze后才出现的 很多的时侯过期统计信息会令优化器做出一个错误的执行计划 因些我们应及时更新这些信息 在Oracle 及以后的版本 Oracle列推荐用CBO的方式

  

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

  

   优化器的优化模式(Optermizer Mode)

  

  优化模式包括Rule Choose First rows All rows这四种方式 也就是我们以上所提及的 如下我解释一下

  

  Rule:不用多说 即走基于规则的方式

  

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

  

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

  

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

  

   如何设定选用哪种优化模式

  ◆A Instance级别

  

  我们可以通过在init ora文件中设定OPTIMIZER_MODE=RULE OPTIMIZER_MODE=CHOOSE OPTIMIZER_MODE=FIRST_ROWS OPTIMIZER_MODE=ALL_ROWS去选用 所提的四种方式 如果你没设定OPTIMIZER_MODE参数则默认用的是Choose这种方式

  

  ◆B Sessions级别

  

  通过SQL> ALTER SESSION SET OPTIMIZER_MODE= ;来设定

  

  ◆C 语句级别

  

  这些需要用到Hint 比如:

>   为什么有时一个表的某个字段明明有索引 当观察一些语的执行计划确不走索引呢?如何解决呢?

  

  ◆A 不走索引大体有以下几个原因

  

  你在Instance级别所用的是all_rows的方式

  

  你的表的统计信息(最可能的原因)

  

  你的表很小 上文提到过的 Oracle的优化器认为不值得走索引

  

  ◆B 解决方法

  

  可以修改init ora中的OPTIMIZER_MODE这个参数 把它改为Rule或Choose 重起数据库 也可以使用 中所提的Hint

  

  删除统计信息

  

>

  表小不走索引是对的 不用调的

  

   其它相关

  

  ◆A 如何看一个表或索引是否是统计信息

  

>

  ◆B 假如我们先用CBO的方式 就应当及时去更新表和索引的统计信息 以免生形不切合实的执行计划

  

> cha138/Article/program/Oracle/201311/18622

相关参考

知识大全 oracle认证辅导:oracle优化和管理sql1

  oracle认证辅导oracle优化和管理sql  查看当前正在执行的等待情况  SELECTTAsid  TAseq#  TBUsername  TBTerminal  TBProgram  D

知识大全 如何对Oracle中的优化器进行评估优化

如何对Oracle中的优化器进行评估优化  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Orac

知识大全 数据库规范化与优化问题讲解

  数据库设计是应用程序设计的基础其性能直接影响应用程序的性能数据库性能包括存储空间需求量的大小和查询响应时间的长短两个方面为了优化数据库性能需要对数据库中的表进行规范化规范化的范式可分为第一范式第二

知识大全 Oracle中优化SQL的原则

Oracle中优化SQL的原则  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  已经检验的语句和已

知识大全 专家讲解优化Derby数据库程序性能

专家讲解优化Derby数据库程序性能  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Derby这

知识大全 Oracle中操作系统优化和使用资源管理器

Oracle中操作系统优化和使用资源管理器  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  操作系

知识大全 Linux环境MySQL服务器级优化讲解

Linux环境MySQL服务器级优化讲解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  摘要本节

知识大全 实例讲解MYSQL数据库的查询优化技术

实例讲解MYSQL数据库的查询优化技术  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  数据库系统

知识大全 Oracle笔记-优化策略与工具

Oracle笔记-优化策略与工具  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  第章优化策略与工

知识大全 如何选择Oracle优化器

如何选择Oracle优化器  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  选用适合的Oracle