索引失效有哪些情况?如何判断索引失效?

索引失效有哪些情况?如何判断索引失效?
参与2

1同行回答

royalwzyroyalwzy技术经理海通证券股份有限公司
索引的失效分为两类,一类是指oracle不再维护 当索引本身的状态就为invalid或者unusable的时候,这个时候是物理就失效,还有一种就是索引本身的状态没有问题 但是没有按着我们预期的目标去走这个索引的执行计划。我们先来说说第一种,对于普通的表造成索引状态无效的可能有 1. ...显示全部
索引的失效分为两类,一类是指oracle不再维护 当索引本身的状态就为invalid或者unusable的时候,这个时候是物理就失效,还有一种就是索引本身的状态没有问题 但是没有按着我们预期的目标去走这个索引的执行计划。
我们先来说说第一种,对于普通的表造成索引状态无效的可能有
1. 当表发生了move操作 alter table table_name move [tablespace  tbs_name]
2. 使用过sqlldr导入数据时使用了并行或者加了direct=y 并且主键发生了重复的时候
3.当手动的做了一个alter index unusable的时候
对于分区表的话又要分local index和globa index,当然上面的操作对于分区表来说同样会导致
1、 对于分区表的local index 在exchange without including indexes的时候也会unusable
2、 对于分区表的globa index 上如果做设计到partition|sub partition的操作(merge exchange split add move truncate)未指定update indexes子句时会失效 注意:range/list分区的时候不是这样子的
status的状态可以在user_indexes或者DBA_IND_PARTITIONS里来查看。

接下来我们来看一下第二种明明应该走 但是并没有走索引的情况
使用<> (有的时候单独的使用< 或者>的时候也有可能)
like的时候不能确定最前面的字符 也就是把’%_’的时候
单独使用复合索引的非前导列
表没有分析
字符类型不匹配 发生了显示的或者隐式的转换或者对索引列进行了运算
使用了 not in 或者 not exist
基于cbo时全表扫描代价小
b-tree索引is not null的时候会走,is not null的时候不会走 位图的时候都会 复合索引的时候 is not null会 is null时要看前导列

这个时候我们可以去看语句的执行计划来看有没有走索引收起
证券 · 2015-06-12
浏览1161

提问者

lxin365
其它MMA
擅长领域: 数据库云计算灾备

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2015-06-12
  • 关注会员:1 人
  • 问题浏览:4189
  • 最近回答:2015-06-12
  • X社区推广