索引失效情况举例子

索引失效是指在使用索引时,由于某些原因导致索引无法正常工作或失效的情况。以下是一些导致索引失效的情况:

 

没有查询条件或者查询条件没有建立索引。

 

在查询条件上没有使用索引列。

 

查询语句中的查询列都是索引列,这种情况被称为覆盖索引,此时查询所有列的数据,非索引列不会走索引。

 

查询条件使用函数在索引列上,这种情况应当创建基于函数的索引。

 

隐式转换导致索引失效,例如表的字段定义是varchar2(20),但在查询时把该字段作为number类型以where条件传给Oracle,会导致索引失效。

 

对索引列进行运算(如+、-、*、/等)导致索引失效。

 

like模糊查询时,使用“%_”会导致索引失效。

 

查询条件单独引用复合索引里非第一位置的索引列。

 

对小表查询或者查询的数量没有达到一定比例(通常是30%以上)。

 

基于成本分析(如Oracle认为全表扫描成本更小)。

 

字符型字段为数字时在where条件里不添加引号。

 

如果条件中有or,即使其中有部分条件带索引也不会使用,要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引。

 

把两个单独建了索引的列,用来做列对比时索引会失效。

 

主键字段中使用not in关键字查询数据范围,可以走索引。而普通索引字段使用了not in关键字查询数据范围,索引会失效。

 

使用not exists时,索引也会失效。

 

order by语句中没有加where或limit关键字,该sql语句将不会走索引。

 

对多个索引进行order by时,如果它们的排序规律相同(如都升序或都降序),则可以走索引,如果一个字段是升序,另一个字段是降序,则索引会失效。

 

总之,索引失效的情况有很多种,需要根据具体情况进行分析和调整。在使用索引时,需要注意建立合适的索引,并正确地使用查询条件,以充分发挥索引的作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

饭九钦vlog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值