oracle 索引失效的场景

1、索引列使用如下条件,like '%abc%'、is null/is not null、!=或<>、not in(注:可以使用in)

not in 应该改为not exists 

2、索引列使用了函数,例如

select * from t where f(index_column) = value 

eg:select * from t where sub(name,1,3) = 'abc'

3、索引列参与运算

select * from t where index_column/2 > 1

应改为select * from t where index_column > 2

4、count(*)

(4参考书中<Oracle9i&10g编程艺术:深入数据库体系结构>上的)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用Oracle数据库时,索引失效可能发生在以下几种场景中: 1. 索引选择性低:索引选择性是指索引中不同值的数量与表中总行数的比例。如果索引选择性很低,即索引中的值重复较多,那么使用该索引进行查询可能会导致大量的IO操作,从而降低查询性能。 2. 数据分布不均匀:如果表中的数据在索引列上分布不均匀,即某些值的数量远远多于其他值,那么使用索引进行查询时可能会导致大量的IO操作,从而降低查询性能。 3. 索引列上存在函数或表达式:如果在索引列上使用了函数或表达式,那么查询时需要对索引列进行计算,这可能导致索引失效。 4. 索引列上存在隐式数据类型转换:如果在查询条件中使用了与索引列类型不匹配的数据类型,Oracle会进行隐式数据类型转换,这可能导致索引失效。 5. 查询条件中使用了OR操作符:当查询条件中使用了OR操作符时,如果每个OR条件都无法使用索引进行优化,那么整个查询可能无法使用索引,从而导致索引失效。 6. 查询条件中使用了非等值操作符:当查询条件中使用了非等值操作符(如大于、小于等),索引可能无法被完全利用,从而导致索引失效。 7. 索引列上存在NULL值:如果索引列上存在大量的NULL值,那么使用该索引进行查询时可能会导致索引失效。 8. 数据更新频繁:如果表中的数据频繁更新,那么索引可能会失效,因为Oracle需要维护索引的一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值