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

摘要:
我相信您将使用Pl/sqlDeveloper和Toad等工具来查看语句的执行计划,即基于规则的BasedOptimization(简称RBO)和基于成本的BasedOptimize(简称CBO)。主要指表和索引的统计。统计信息提供了表大小、行数和每行长度等信息。在您分析这些统计信息之前,这些统计信息在数据库中不可用。

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方式是类似的,所不同的是当一个表有统计信息时,它将是以最快的方式返回查询的最先的几行,从总体上减少了响应时间。Java虚拟机类装载流程

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

免责声明:文章转载自《Oracle数据库优化器的优化方式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇arcengine动态显示所需字段值Intellij插件之JRebel下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java日志-Log4j2

Log4j2参考资料 Log4j2 官方配置文档 1. Log4j2基本概念: Logger 在代码中产生日志信息的。比如logger.info("some log message")。 有name属性,并与LoggerConfig(Logger的配置信息)相关联。使用LogManager.getLogger方法获得。一般来说在每个需要记录日志的类中都需要...

CentOS 6.9下KVM虚拟机网络Bridge(网桥)方式与NAT方式详解(转)

摘要:KVM虚拟机网络配置的两种方式:NAT方式和Bridge方式。Bridge方式的配置原理和步骤。Bridge方式适用于服务器主机的虚拟化。NAT方式适用于桌面主机的虚拟化。 NAT的网络结构图: Bridge的网络结构见图: 一、Bridge方式 问题 客户机安装完成后,需要为其设置网络接口,以便和主机网络,客户机之间的网络通信。事实上,如果要在安...

Oracle数据库对象题库

一、    填空题 在用 create 语句创建基本表时,最初只是一个空的框架,用户可以使用insert命令把数据插入表中。 在基本表不需要时,可以使用 drop table 语句撤消。在一个基本表撤消后,所有的数据都丢弃。所有相关的索引被删除。 可以使用 rename 语句改变表名(视图),要求必须是表(视图)的所有者。 根据约束的作用域,约束可以分为...

格式Table.TransformColumns(Power Query 之 M 语言)

数据源:         任意表,其中包含文本列 目标:         对文本列格式进行设置  操作过程:    选取文本列》【转换】》【格式】》选取        M公式:     = Table.TransformColumns( 表, {{"列名1", 转换函数1, 数据类型1},…,{"列名n", 转换函数n, 数据类型n}}, 剩余列转换函数,...

snmap弱口令攻击利用

科普Snmap:   简单网络管理协议(SNMP) 是专门设计用于在 IP 网络管理网络节点(服务器、工作站、路由器、交换机及HUBS等)的一种标准协议,它是一种应用层协议。具体废话就不多说了,自己百度去。默认端口号是:161 如果能获取只读(RO)或读/写(RW)权限的团体字符串,将对你从设备中提取信息发挥重要作用, snmp v1 v2天生存在安全缺...

linux 后台执行oracle sql脚本

一、简单后台执行。 nohup  sqlplus   Oracle/Oracle@orcl   @sql.sql     & --这样的写法会报错(Error 45 initializing SQL*Plus Internal error)  今天打算写个后台执行清理单张表和备份sql脚本。发现一直报错,网上也没有具体的修改方法。 后来到别的博客去...