Oracle 在执行SQL语句时,有两种优化方法:即基于规则的RBO和基于代价的CBO。 在SQL执教的时候,到底采用何种优化方法,就由Oracle参数 optimizer_mode 来决定。
SQL> show parameter optimizer_mode
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
optimizer_mode string CHOOSE
optimizer_mode 参数值共有以下四个:
第一:CHOOSE
这个是Oracle的默认值。采用这个值时,Oracle即可以采用基于规则RBO,也可以采用基于代价的CBO,到底使用那个值,取决于当前SQL的被访问的表中是不是有可以使用的统计信息。
如果有多个被访问的表,其中有一个或多个有统计信息,那么Oralce会对没有统计信息的表进行采样统计(即不全部采样),统计完成后,使用基于代价的优化方法CBO。
如果所有被访问的表都没有统计信息,Oracle就会采用基于规则的优化方法RBO。
第二:ALL_ROWS
不管是不是有统计信息,全部采用基于成本的优化方法CBO。
第三:FIRST_ROWS_n
不管是不是有统计信息,全部采用基于成本的优化方法CBO,并以最快的速度,返回前N行记录。
第四:FIRST_ROWS
使用成本和试探法相结合的方法,查找一种可以最快返回前面少数行的方法;这个参数主要用于向后兼容。
第五:RULE
这个参数正好和ALL_ROWS相反,不管是不是统计信息,全部采用基于规则的优化方法。
如何更改 optimizer_mode 的参数呢?可以用以下的方法。
SQL> alter session set optimizer_mode='RULE';
会话已更改。
分享到:
相关推荐
2. 全局化参数:如optimizer_mode、cursor_sharing等,根据应用特点调整以优化查询行为。 3.后台进程调整:如DBWn(数据写入进程)、ARCn(归档日志进程)、LCKn(锁定进程)等,根据系统负载调整数量和优先级。 ...
Instant 级别:修改初始化参数,例如在 init.ora 文件中设定 OPTIMIZER_MODE=RULE、OPTIMIZER_MODE=CHOOSE、OPTIMIZER_MODE=FIRST_ROWS、OPTIMIZER_MODE=ALL_ROWS。 * B. Session 级别:当前会话输入 ALTER SESSION...
优化器目标不仅可以通过初始化参数OPTIMIZER_MODE在实例级别进行设置,还可以通过执行ALTER SESSION SET OPTIMIZER_MODE语句在会话级别进行调整。此外,通过在SQL语句中使用Hints,可以针对特定查询动态地改变优化...
_optimizer_mode_ Optimizer_mode 是 Oracle 数据库中一个重要的参数,它决定了数据库如何选择执行计划。在optimizer_mode=choose 时,如果表有统计信息(分区表外),优化器将选择 CBO,否则选 RBO。CBO 尝试找到...
影响优化器优化目标的因素主要有三个:OPTIMIZER_MODE 初始化参数、数据字典中的 CBO 统计数据、用来改变 CBO 优化目标的 Hints。 OPTIMIZER_MODE 初始化参数 ------------------------- OPTIMIZER_MODE 初始化...
§3.4.23 优化方式(OPTIMIZER_MODE) 77 §3.4.24 进程数(PROCESSES) 77 §3.4.25 回滚段名称(ROLLBACK_SEGMENTS) 78 §3.4.26 服务名(SERVICE_NAMES) 78 §3.4.27 会话的数(SESSIONS) 78 §3.4.28 共享池大小(SHARED...
`optimizer_mode`参数的`CHOOSE`和`RULE`选项在Oracle 10g中已被淘汰,取而代之的是`ALL_ROWS`、`FIRST_ROWS`、`FIRST_ROWS_N`等优化目标,这些目标分别针对整体查询性能、快速返回第一条记录和平衡首行与总行数的...
Oracle提供了`OPTIMIZER_MODE`初始化参数来控制优化器的行为。这个参数的不同设置会影响优化器的选择: - **CHOOSE**: 缺省值,优化器会根据是否有可用的统计信息来选择使用基于成本的优化方法(CBO)或基于规则的...
这是因为在Oracle 10g中,参数`optimizer_dynamic_sampling`的默认值为2,意味着针对没有统计信息的任何表都采用动态采样,而在Oracle 9i中该参数的默认值为1。 #### 成本的定义 **CBO的核心概念** 网络上关于CBO...
#### 一、Oracle的Optimizer及其相关知识 Oracle数据库在执行SQL语句前,会先分析语句的执行计划,这一过程由**优化器**(Optimizer)完成。优化器根据不同的情况为每条SQL语句生成一种或多种执行计划,并从中选择...
Oracle 优化器有两种模式:CBO(Cost-Based Optimizer)和 RBO(Rule-Based Optimizer)。CBO 是基于成本的优化器,需要使用统计信息,据此计算最佳的执行计划;而 RBO 是基于规则的优化器,根据 Oracle 设定的规则...
7. **查询优化器**:理解CBO(Cost-Based Optimizer)的工作原理,学习如何使用optimizer_mode和hints来影响优化器的选择。 8. **物化视图和重写**:对于经常执行的复杂查询,创建物化视图可以预先计算结果,提高...
设定优化器模式可以通过ALTER SESSION语句完成,例如,设置为CBO模式:`ALTER SESSION SET OPTIMIZER_MODE=COST_BASED;` 二、Oracle 索引介绍 索引是提升查询效率的关键工具,分为多种类型,如B树索引、位图索引、...
- **OPTIMIZER_MODE初始化参数**: 这个参数控制着Oracle优化器的工作模式。根据不同的设置,它可以指导优化器使用基于成本的优化方法(CBO)或基于规则的优化方法(RBO)。具体来说,该参数有以下几种取值: - **CHOOSE...
Oracle提供了多种优化器模式,主要包括基于规则的优化器(Rule-Based Optimizer, RBO)和基于成本的优化器(Cost-Based Optimizer, CBO)。 - **RBO**:基于表和索引的定义信息来确定执行计划。它遵循一组预定义的规则...
- 通过`OPTIMIZER_MODE`或`OPTIMIZER_GOAL`参数设置优化器模式,如`ALTER SESSION SET OPTIMIZER_GOAL=FIRST_ROWS`。 - 使用`EXPLAIN PLAN`和`PLAN_TABLE`查看查询的执行计划,以判断优化器类型。 以上是Oracle...
- **Instance级别**:通过修改`initSID.ora`文件中的`OPTIMIZER_MODE`参数来设置全局的优化模式。 - **Session级别**:使用`ALTER SESSION SET OPTIMIZER_MODE`命令临时更改当前会话的优化模式。 - **Statement级别*...