深入理解Oracle索引(4):optimizer_index_cost_adj详解

本文探讨了Oracle数据库中optimizer_index_cost_adj参数如何影响执行计划。默认值100表示索引访问与全表扫描成本相等。通过调整此参数,可以观察到执行计划的不同选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        果哪天你遇到特殊的情况,比如系统数据字典的索引坏了,但是你去没有办法去修改这个索引,因为有些系统内部的东西你是动不了的
       你就会说“我要是能绕过这个索引,全部走全表扫描,把库里的数据全部导出来该多好啊”
       那么,这个时候,optimizer_index_cost_adj就很有用了
       
       
          
          该参数表示全表扫描和索引扫描的百分比,取值范围∈[1,10000],缺省为100
          告诉优化器:走索引和走全表扫描的代价的比值是多少

          默认值100意味着索引访问与全表扫描是完全等价的

sys@ORCL> show parameter optimizer_index

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
optimizer_index_caching              integer     0
optimizer_index_cost_adj             integer     100

          OPTIMIZER_INDEX_CACHING参数是用来告诉Oracle一个索引被高速缓存的百分比的参数
          OPTIMIZER_INDEX_COST_ADJ参数是用来告诉Oracle高速缓存多少表数据的参数
          这个数越小,表访问单个块的成本就越低;反之,这个数越大,成本就越高
          理解这个参数的一种办法是想像这个表反映多块I/O(与全表扫描)的成本与执行单块I/O(与索引读取有关)的成本
          如果保持这个参数为默认的设置100,则多块I/O与单块I/O的成本相同
          设置这个值为50导致优化程序考虑单块表访问的成本为多块I/O的一半,有效地把表访问的成本减为原来的一半
          
          对Oracle而言,这个缺省值通常需要调整
          一般来说,optimizer_index_caching可以设置为90左右
          对于大多数OLTP,optimizer_index_cost_adj可以设置在10~50之间
          对于OLAP和DSS系统,可能无法简单的把optimizer_index_cost_adj设置为50
          通常我们可以根据统计信息,db file scattered reads/db file sequential reads来计算

--创建测试表

sys@ORCL> drop table t purge;

Table dropped.

sys@ORCL> create table t as select * from dba_objects;

Table created.

sys@ORCL> create index idx_t on t (owner);

Index created.

sys@ORCL> analyze table t compute statis
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值