参数 optimizer_index_cost_adj 设定了通过索引扫描和全表扫描之间的代价消耗关系,其默认值为 100 ,表示 ORACLE 在计算查询成本时,通过索引查找和全表扫描成本相等。该参数值越小,表明通过索引查找的代价越小,反之则越大。
通过以下试验,演示该参数的用法。
- 查看参数 optimizer_index_cost_adj 的当前值
SQL> conn / as sysdba
|
|
|
|
---|---|---|---|---
Connected.
|
|
|
|
|
SQL> show parameter optimizer_index_cost_adj
|
|
|
|
|
|
|
|
NAME TYPE VALUE
------------------------------------ ----------- ---------
optimizer_index_cost_adj integer 100
--参数当前的默认值为100
|
SQL>
|
|
|
|
|
|
SQL> select isses_modifiable,issys_modifiable
|
2 from v$parameter
|
|
|
|
3 where name='optimizer_index_cost_adj';
|
|
|
|
|
|
|
|
ISSES ISSYS_MOD
|
|
|
|
|
----- ---------
|
|
|
|
|
TRUE FALSE
-- 说明该参数可以在 SESSION级别动态改变,
但不能在SYSTEM级别动态改变
|
|
|
|
|
- 创建表及索引,并对表进行分析
SQL> conn scott/tiger
|
|
|
---|---|---|---
Connected.
|
|
|
|
SQL> create table test(a number,b char(10));
|
|
|
|
|
|
Table created.
|
|
|
|
|
|
|
|
|
SQL>
|
|
|
|
|
SQL> begin
|
|
|
|
2 for i in 1..10000 loop
|
|
3 insert into test values(i,to_char(i));
4 end loop;
|
|
|
|
5 commit;
|
|
|
|
6 end;
|
|
|
|
7 /
|
|
<TD style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0.75pt;