对参数optimizer_index_cost_adj的一点理解_041009


参数 optimizer_ index_ cost_ adj设定了通过索引扫描和全表扫描之间的代价消耗关系,其默认值为100,表示ORACLE在计算查询成本时,通过索引查找和全表扫描成本相等。该参数值越小,表明通过索引查找的代价越小,反之则越大。

   通过以下试验,演示该参数的用法。

1)查看参数 optimizer_ index_ cost_ adj的当前值


SQL>conn/assysdba

 

 

 

 

Connected.

 

 

 

 

 

SQL>showparameter optimizer_ index_ cost_ adj

 

 

 

 

 

 

 

 

 

NAME                                TYPE       VALUE

--------------------------------------------------------

optimizer_ index_ cost_ adj            integer    100

--参数当前的默认值为100

 

SQL>

 

 

 

 

 

 

SQL>selectisses_modifiable,issys_modifiable

 

 2 fromv$parameter

 

 

 

 

 3 wherename=' optimizer_ index_ cost_ adj';

 

 

 

 

 

 

 

 

 

ISSESISSYS_MOD

 

 

 

 

 

--------------

 

 

 

 

 

TRUE FALSE

--说明该参数可以在SESSION级别动态改变,

 但不能在SYSTEM级别动态改变

 

 

 

 

 

2)创建表及索引,并对表进行分析

SQL>connscott/tiger

 

 

 

Connected.

 

 

 

 

SQL>createtabletest(anumber,bchar(10));

 

 

 

 

 

 

 

Tablecreated.

 

 

 

 

 

 

 

 

 

 

SQL>

 

 

 

 

 

SQL>begin

 

 

 

 

 2   foriin1..10000loop

 

 

 3     insertintotestvalues(i,to_char(i));

 4   endloop;

 

 

 

 

 5   commit;

 

 

 

 

  6 end;

 

 

 

 

 7 /

 

 

 

 

 

 

 

 

 

 

 

PL/SQLproceduresuccessfullycompleted.

 

 

 

 

 

 

 

SQL>

 

 

 

 

 

SQL>create indexidx_test_aontest(a);

 

 

 

 

 

 

 

indexcreated.

 

 

 

 

 

 

 

 

 

 

SQL>

 

 

 

 

 

SQL>analyzetabletestcomputestatistics

 

 2 fortable

 

 

 

 

 3 forall indexes

 

 

 

 4 forall indexedcolumns;

 

 

 

 

 

 

 

 

Tableanalyzed.

 

 

 

 

 

 

 

 

 

 

SQL>

 

 

 

 

 


3)将参数 optimizer_ index_ cost_ adj设为100,查看相应的执行计划

SQL>setautotracetraceonlyexplain

 

 

 

SQL>altersessionset optimizer_ index_ cost_ adj=100;

 

 

Sessionaltered.共2页  1 

你可能感兴趣的:(数据库)