http://www.toadworld.com/KNOWLEDGE/KnowledgeXpertforOracle/tabid/648/TopicID/CBO/Default.aspx
基于规则的优化器(rule-based optimizer,RBO)的缺点之一是它遵循一组规则,而且一直是,所有时间内遵循。这导致了一致的执行计划,但往往也导致了低效的执行计划。认识到基于规则的优化器的缺点,Oracle 在 Oracle 7.1 引入了基于成本的优化(cost-based optimizer,CBO)以修正这个问题。
对 Oracle 和我们来说,幸运的是,基于成本的优化器(CBO)在 8i 和 9i 做了更多的改进。更大的“改进”是,Oracle 打算在 Oracle 10i 中去掉 RBO,这就要小心。
基于成本的优化器是一个程序。它的任务是在解析期间分析你的 SQL 语句,确定访问你请求数据的最佳方式。它使用统计信息,这需要 DBA 创建。例如,索引或全表扫描,将是最有效的数据访问方式。根据一些不同的因素来计算,这些因素包括:
- 被访问表的总行数
- 被访问列的数据密度
- 存在的索引以及这些索引的类型和内容
- 平均的行长度
- 返回列的类型
- 各种数据库参数
CBO 将查看所有不同的因素,通过这些不同的可能的访问路径的周期。当通过这些访问路径时,CBO 将分配给这些路径代价。一旦 CBO 完成分析,它就返回具有最低代价的计划来解析,并使用该计划。