【TechTarget中国原创】问:Oracle CBO、RBO以及统计之间是什么关系?
答:你提交查询时,Oracle通常有很多种执行该查询的方法。“我是不是该用到索引?我应该用哪种连接方式?”在Oracle执行该查询之前,它还要决定这些问题的答案从而选择最佳执行路径。
Oracle以前的版本采用了一系列规则决定最佳执行路径。其中的一条规则就是:如果存在索引,就使用索引。这些规则还分了等级,所以一些规则要胜过另一些规则。所有这些规则都叫做基于规则的优化程序(RBO)。
现在来看看只有两个数据行和一个索引的数据库表。在查询在这个表时不用使用该索引,因为这样做还会带来其他的操作。你只需要读包括这两个行的模块、忽视索引。但以前的RBO可以执行其他的操作,因为RBO不够灵活,它不能理解只包括少数几个行的表,所以它不能充分利用这个索引。这一概念就让我们回到了基于开销的Oracle优化程序(CBO)上。CBO基于数据分配、表中的行数等进行决策,所以CBO需要有关表和索引的一些信息。如果采用CBO,我们就要对它使用的表和所引进行统计。而RBO则不会用到这些统计数据。