首页 > 数据库 > Oracle > Oracle优化器(RBO与CBO)
RBO优化器在某些时候生成的执行计划并不是最优,例如:
1.我们知道在查询的结果集中包括大量数据时,使用全表扫描的效率是要比索引高的。(全表扫描每次会读取多个数据块)。
2.在出现执行路径等级相同的情况时,RBO会根据对象(索引)在数据字典中的顺序来选择执行计划(不同的索引执行效率不同)。
从Oracle 10g 之后官方已经不推荐使用RBO。
2.CBO优化器
CBO(Cost-Based Optimizer)为一种基于成本的优化器。这里的成本指的是执行SQL时CUP和I/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博客 ” ,链接:https://blog.itpub.net/29324876/viewspace-777426/ ,如需转载,请注明出处,否则将追究法律责任。