Oracle数据库优化器的优化方式

  Oracle是世界领先的信息管理软件开发商,因其复杂的关系数据库产品而闻名。本文介绍Oracle优化器,它是一个非常好用的工具。Oracle在执行一个SQL之前,首先要分析一下语句的执行计划,然后再按执行计划去执行。分析语句的执行计划的工作是由优化器(Optimizer)来完成的。

  不同的情况,一条SQL可能有多种执行计划,但在某一时点,一定只有一种执行计划是最优的,花费时间是最少的。相信你一定会用Pl/sql Developer、Toad等工具去看一个语句的执行计划,不过你可能对Rule、Choose、First rows、All rows这几项有疑问,因为我当初也是这样的,那时我也疑惑为什么选了以上的不同的项,执行计划就变了?

  1.Oracle优化器的优化方式

  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.Oracle优化器的优化模式(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

  原文出自:PHPchina  


转载于:https://www.cnblogs.com/ZHF/archive/2011/07/04/2097090.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263393.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux任务计划

1、at —— 在未来某个时间点执行一次某任务使用实例:at 时间:设定某个时间点at>COMMANDat>Ctrld指定时间:绝对时间:HH:MM,DD.MM.YY,MM/DD/YY相对时间:now3minutes单位:minute…

大数据——Hadoop学习笔记

具体代码可以参考: https://github.com/Ostrich5yw/java4BigData

day04 笔记

目录 1. 程序的分支控制1.1 单分支结构1.2 二分支结构1.3 多分支结构1.4 条件判断及组合1.5 程序的异常处理2. 程序的循环结构2.1 遍历循环2.2 无限循环2.3 循环控制保留字2.4 循环的高级用法3. random库基本介绍3.1 random库概述1. 程序的分支控制 1.1 单分支结构 根据判断条件…

Inside C++ object Model--对象模型概述

在C中, "数据"和"处理数据的操作"是分开声明的, 语言本身并没有支持"数据和函数"之间的关联性. 这种称为"procedural", 由一组算法函数所驱动, 他们处理的是共同的外部数据. 而C, 则在程序风格, 更在程序的思考上有明显的差异, 它以A…

[转载]男生女生过家家呀

一时兴起百度一下高中时的语文老师,还真搜到了三篇文章。觉得这篇比较有意思,把它贴上来。以我目前的学识和人生阅历,实在没资格评论恩师的文章,不过欢迎大家发表自己的意见啊。 …

Microsoft Visual C++ Runtime Library Runtime Error的解决的方法

打开浏览器时,出现Microsoft Visual C Runtime Library Runtime Error错误,初步预计是软件冲突,可能有多种出错的方式,我的是浏览器自己主动关闭。 一、 有些时候,在你安装、执行某个软件,可能会得到这样一…

java之hibernate之基于外键的一对一单向关联映射

这篇讲解基于外键的一对一单向关联映射 1.考察如下信息,人和身份证之间是一个一对一的关系。表的设计 注意:基于外键的一对一关联的表结构和多对一的表结构是一致的,但是,外键是唯一的。 2.类的结构 Person.java public class Per…

访问被拒绝:“microsoft.web.ui.webcontrols”的解决办法

错误: 配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。 分析器错误信息: 访问被拒绝:“microsoft.web.ui.webcontrols”。 ---&#xff0…

intellij idea 热部署 spring jvm 版

2019独角兽企业重金招聘Python工程师标准>>> 配置 intellij idea tomcat 加入下面这个参数, 对应jar 到 mvnrepo 下载 。 -javaagent:D:\work\springloaded-1.2.3.RELEASE.jar -noverify 转载于:https://my.oschina.net/u/556878/blog/416563

大数据——Hadoop学习笔记(配置)

具体代码可以参考: https://github.com/Ostrich5yw/java4BigData

面试题——20190717

redis持久化有哪些策略? 文章:redis持久化的几种方式 redis提供两种方式进行持久化,一种是RDB持久化(原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化),另外一种是AOF(append on…

以C#编写的Socket服务器的Android手机聊天室Demo

内容摘要 1.程序架构 2.通信协议 3.服务器源代码 4.客户端源代码 5.运行效果 一、程序架构 在开发一个聊天室程序时,我们可以使用Socket、Remoting、WCF这些具有双向通信的协议或框架。而现在,我正要实现一个C#语言作为服务器端、Android作为客户端的聊天…

[导入]泊

又梦见战乱。 过年可能又回不了家,昨天打电话给家里,母亲哭了。 出来了才觉得我为什么活着,每天平躺的地方够大生活就已经满足了,但是需要什么来填补我空洞的灵魂?文章来源:http://dotnet.mblogger.cn/zeusvenus/posts…

LeetCode—275. H 指数 II

275. H 指数 II 题目描述: 给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数,citations 已经按照 升序排列 。计算并返回该研究者的 h 指数。 h 指数的定义:h 代表“高引用次数”&#xff0…

maven环境快速搭建

2019独角兽企业重金招聘Python工程师标准>>> 最近,开发中要用到maven,所以对maven进行了简单的学习。因为有个maven高手在身边,所以,很快就上手了,我这里算是自我总结吧。关于maven是什么东东,请…

20190718考试70分记

又考试了&#xff0c;这次题明显感觉难多了&#xff0c;骗了不少分&#xff0c;竟然rk13 第一题一看不可做&#xff0c;然后看第二题 第二题一开始也没有思路&#xff0c;然后我就看上了k<1的情况&#xff0c; 显然k0时只要求所有数的gcd即可&#xff0c; k1的话枚举每一个树…

[散记]今天

前几天还下了一场不小的雪&#xff0c;冷的很。昨天出门还穿了厚毛衣和棉外套&#xff0c;起风的时候还觉得凉飕飕的。今天就热的很了&#xff0c;天气预报说最高温度有16度。出门换了薄毛衣和薄外套&#xff0c;走了一段路&#xff0c;竟是闷热的很&#xff0c;索性将外套脱掉…

随笔03

Application -- HOOKUP -- Interpreters 转载于:https://www.cnblogs.com/soulnearby/archive/2011/07/08/2100734.html

Struts2 文件上传,下载,删除

本文介绍了&#xff1a; 1.基于表单的文件上传 2.Struts 2 的文件下载 3.Struts2.文件上传 4.使用FileInputStream FileOutputStream文件流来上传 5.使用FileUtil上传 6.使用IOUtil上传 7.使用IOUtil上传 8.使用数组上传多个文件 9.使用List上传多个文件 ----1.基于表单的文件…