ORACLE数据库SQL优化--->优化器基础知识

一,优化器的模式

       在ORACLE数据库中,优化器的模式是由参数optimizer_mode的值来决定的,optimizer_mode的值可能是RULE,CHOOSE,FIRST_ROWS_n(n=1,10,100,1000),FIRST_ROWS或ALL_ROWS。 OPTIMIZER_MODE的各个可能值的含义如下:

1,RULE

表示ORACLE将使用RBO来解析目标SQL,此时目标SQL中所涉及的各个对象的统计信息对于RBO来说是没有任何作用的。

2,CHOOSE

CHOOSE是 ORACLE 9i中OPTIMIZER_MODE的默认值,它表示ORACLE在解析目标SQL时到底是使用RBO还是CBO取决于该SQL中所涉及的表的对象是否有统计信息,如果有统计信息就用CBO,否则用RBO。

3,FIRST_ROWS_n(n=1,10,100,1000)

此时ORACLE会使用CBO来解析目标SQL,且此时CBO在计算该SQL的各条执行路径的成本值时的测重点是在于以最快的响应速度返回头n(n=1,10,100,10000)条记录。

4,FIRST_ROWS

它是在ORACLE 9i中就已经过时的参数。

5,ALL_ROWS

它是ORACLE 10g以及后续ORACLE数据库版本中OPTIMIZER_MODE的默认值,它表示ORACLE会使用CBO来解析目标SQL,且此时CBO在计算该SQL的各条执行路径成本值时侧重点在于最佳的吞吐量(即最小的系统I/O和CPU资源的消耗量)。

实际上,成本的计算方法随着优化器模式的不同而不同,主要体现在ALL_ROWS和FIRST_ROWS_n(n=1,10,100,1000)对成本值计算方法的影响上。当优化器模式为ALL_ROWS时,CBO计算成本的侧重点在于最佳的吞吐量;而当优化器模式为FIRST_ROWS_n(n=1,10,100,1000)时,CBO计算成本的侧重点会变为以最快的响应速度返回头n(n=1,10,100,1000)条记录。这意味着同样的执行步骤,在优化器为ALL_ROWS和FIRST_ROWS_n(n=1,10,100,1000)时CBO分别计算出来的成本值会存在巨大的差异,这意味着优化器模式对CBO计算成本(进而对CBO选择执行计划)有着决定性的影响!!!

 

你可能感兴趣的:(Oracle10g,数据库SQL优化)