oracle有两种优化器:基于规则的优化器(rbo,rule based optimizer),和基于成本/代价的优化器(cbo,cost based optimizer)。
我们要确定数据库运行在何种优化模式下,相应的参数是:optimizer_mode。可在sql命令中中运行show parameter optimizer_mode
来查看。
optimizer_mode 中常有五个参数值:CHOOSE、ALL_ROWS、FIRST_ROWS_N、FIRST_ROWS、RULE,例如:oracle 9i,而也有例外,比如oracle 10g少了RULE和CHOOSE
这个是Oracle的默认值。采用这个值时,Oracle即可以采用基于规则RBO,也可以采用基于代价CBO,到底使用那个值,取决于当前SQL的被访问的表中是不是有可以使用的统计信息。
如果有多个被访问的表,其中有一个或多个有统计信息,那么Oralce会对没有统计信息的表进行采样统计(即不全部采样),统计完成后,使用基于代价的优化方法CBO