oracle松散索引扫描,Oracle索引扫描

索引唯一扫描:是针对唯一性索引大扫描,它仅仅适用于where条件里是等值查询的目标SQL,因为扫描的对象是唯一性索引,只扫描索引高度这么多个索引块就停止了,索引的唯一扫描的结果至多只返回一条记录,索引的唯一扫描,扫描索引高度-2个分支块,永远只扫描一个叶子块。

索引范围扫描:索引范围扫描,扫描索引高度-2个分支快,要扫描N多叶子块,取决于where条件,索引范围扫描是单块读,因为物理存储是不连续的。select * from test where id<=1000;访问路径:ROOT -B1 -L1 -L7

索引是排序的,从左到右升序排,最左最小,最右做大,索引默认从左向右扫描,也可以加hint倒着扫描:SQL> select /*+ index_desc(test) */*from test where object_id<=20;

19 rows selected.

Execution Plan

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

Plan hash value: 1069979465

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

| Id  | Operation       | Name   | Rows  | Bytes | Cost (%CPU)| Time     |

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

|   0 | SELECT STATEMENT      |       |    19 |  3933 |     3 (0)| 00:00:01 |

|   1 |  TABLE ACCESS BY INDEX ROWID | TEST   |    19 |  3933 |     3 (0)| 00:00:01 |

|*  2 |   INDEX RANGE SCAN DESCENDING| IDX_ID |    19 |       |     2 (0)| 00:00:01 |

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

3.索引的叶子块只存rowid和列的键值,比表的数据块存的更多的值,select object_id from test where object_id<100;select object_id from test where object_id<1000

性能是一样的,索引扫描最大问题在于回表,如果回表再过滤,就最坑爹了,错误的INDEX RANGE SCAN,返回数据很多和大量回表

4.反键索引,

如果用sequence作为主键,如果insert数据,会不断更新右边的叶子块,dml操作,同一个块,同时只有一个进程去持有,CBC持有,latch: cache buffers chains,在高并发的insert环境中,sequence主键很容易产生热点块,解决办法,把主键处理成随机的,比如手机号或者***号,如果已经用sequence,可用反转索引把叶子块打乱来解决。另外一种解决办法:sid+sequence+pid,反键索引多范围扫描影响大。

5.INDEX SKIP SCAN 索引跳跃扫描。单块读 只可能发生在组合索引上,引导列(组合索引第一列)没有包含在where条件中,并且引导列基数很低。INDEX SKIP SCAN 一般来说只会返回少量数据,如果返回大量数据,说明该执 行计划可能有问题,也就是说索引建立不对。等待事件:db file sequential read HINT: INDEX_SS(表名/别名 索引名)

原文:http://7642644.blog.51cto.com/7632644/1684509

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值