oracle的cbo怎么使用cbo和rule的区别

Oracle CBO的使用与RBO的区别

一、Oracle CBO的使用

Oracle的基于成本的优化器(CBO)在Oracle 7中引入,但在Oracle 8i中才变得成熟。CBO会根据SQL语句的预计成本(这里的成本主要指CPU和内存的使用)来选择最优的执行计划。

统计信息:

CBO依赖于表和索引的统计信息来做出决策。这些统计信息提供了表的大小、行数、每行的长度等信息。

为了使用CBO,你需要确保统计信息是最新且准确的。可以使用ANALYZE命令或DBMS_STATS包来收集和维护这些统计信息。

优化器模式:

通过设置OPTIMIZER_MODE参数为ALL_ROWS、FIRST_ROWS等,可以控制优化器的偏好。

也可以在SQL语句中使用提示(Hint)来强制优化器使用CBO,例如/*+ ALL_ROWS */。

查询编写:

虽然CBO主要基于成本来选择执行计划,但SQL语句的编写方式仍然会影响性能。尽量编写高效且简洁的SQL语句。

二、CBO与RBO的区别

决策依据:

CBO:基于SQL语句的预计成本(CPU、内存等)来选择最优的执行计划。

RBO:基于Oracle内部预定的一些规则来选择执行计划,不考虑SQL语句的成本。

统计信息:

CBO:需要定期更新表和索引的统计信息。

RBO:不依赖于统计信息。

SQL语句的影响:

CBO:虽然SQL语句的编写方式会影响性能,但CBO主要基于成本来选择执行计划。

RBO:SQL语句的写法对执行计划有直接影响,需要开发人员非常了解RBO的各项细则。

适用性和淘汰:

CBO:从Oracle 8开始被广泛使用,并在Oracle 10g中完全取代了RBO。

RBO:在Oracle 10g及以后的版本中,RBO已经不再被支持。

优化目标:

CBO:主要目标是找到成本最低的执行计划,以实现最大的吞吐量或最快的初始响应时间。

RBO:更关注于遵循Oracle的预设规则来选择执行计划,而不考虑实际的性能成本。

总结:CBO是Oracle中更为先进和高效的查询优化策略,它基于统计信息和预计成本来选择最优的执行计划。而RBO则基于预设的规则来选择执行计划,不考虑实际的性能成本。从Oracle 10g开始,Oracle已经完全放弃了RBO,推荐使用CBO。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值