Oracle优化器(RBO与CBO)

        
    
Oracle 80% 的性能问题是由 SQL 语句引起的,而在 SQL 进行硬解析时会使用 Oracle 优化器。优化器( Optimizer )是 Oracle 中内置的一个核心子系统,主要负责成生 SQL 执行计划。目前 Oracle 的优化器分为 RBO CBO 两种类型。
    1.RBO 优化器
    RBO Rule-Based Optimizer )为一种基于规则的优化器。在 RBO Oracle 为各种执行路径( Access Path )设置了固定的等级。 RBO 会根据 SQL 的诸多执行路径中,选取等级低的执行路径最后生成执行计划。 RBO 的执行路径等级分别为:
    1 Single Row by Rowid
    2 Single Row by Cluster Join
    3 Single Row by Hash Cluster Key with Unique or Primary Key
    4 Single Row by Unique or Primary Key
    5 Clustered Join
    6 Hash Cluster Key
    7 Indexed Cluster Key
    8 Composite Index
    9 Single-Column Indexes
    10 Bounded Range Search on Indexed Columns
    11 Unbounded Range Search on Indexed Columns
    12 Sort Merge Join
    13 MAX or MIN of Indexed Column
    14 ORDER BY on Indexed Column
    15 Full Table Scan
    其中 1 级的执行路径是 Single Row by Rowid ,等级最高的执行路径是 Full Table Scan RBO 中会认为等级低的执行路径一定会比等级高的执行路径效率高( Oracle rowid 表示数据的物理存储地址,通过 rowid 查找单个数据是最快的。索引中会存数据的 rowid 。)所以在有索引有 SQL 查询中, RBO 一定会走索引而不会使用等级最高的全表扫描。

RBO优化器在某些时候生成的执行计划并不是最优,例如:

1.我们知道在查询的结果集中包括大量数据时,使用全表扫描的效率是要比索引高的。(全表扫描每次会读取多个数据块)。

2.在出现执行路径等级相同的情况时,RBO会根据对象(索引)在数据字典中的顺序来选择执行计划(不同的索引执行效率不同)。

Oracle 10g 之后官方已经不推荐使用RBO

2.CBO优化器

CBOCost-Based Optimizer)为一种基于成本的优化器。这里的成本指的是执行SQLCUPI/O消耗的量(这里的消耗量是Oracle根据统计信息生成的一个估算值)。CBO在解析SQL时,会从诸多执行路径中选择成本最小的生成执行计划。CBO会根据对象的统计信息计算成本(统计信息中记录着对象的数据量等信息),这意味着CBO解析会比RBO更智能,CBO将会比较执行路径生成效率较高的执行计划。那么CBO就一定是完美的选择吗?

    在某些情况下CBO会有些局限性,例如:
    
1.CBO在计算成本时是按统计信息中的数据计算的,而统计信息每天只更新一次,如果统计信息更新前后数据量存在巨大差距会影响CBO选择错误的执行计划。
    
2.CBO在计算成本时不会考虑DB Buffer Cache,如果DB Buffer Cache中已经缓存了要查询的数据时,是不需要耗费I/O去数据文件读取的。所以CBO可能会高估相关执行路径而选择错误执行计划。
    
3.直方图统计信息方面的不足可能会影响CBO选择错误执行计划。
    
4.在多表关联查询时,表之间的关联顺序会呈几何级的增长,各种可能生成的执行计划数量可能非常庞大,所以CBO只能在前2000种可能的执行计划中选一个,这就可能漏掉最优的执行计划。

DBA_建瑾

2013.11.23

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29324876/viewspace-777426/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29324876/viewspace-777426/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值