造成索引失效的情况列举

某些情况下,查询条件中带有索引列,但是用explain执行计划分析时,却发现key值为null;
下面的几种大致场景可能引起这种情况,列举出来,希望大家不要踩坑.

表示广义或者表示否定的查询条件

例如<>、NOT、in、not exists 因为这类查询条件无法精确定位,故而执行计划会选择全表扫描;

前置通配符

即like关键字的使用 如 where a like ‘%b’,这样也会造成 a列的索引效果失效 ,但是若使用后置通配符则不会影响索引效果 例如 where a like ‘b%’,造成这种效果差异的主要原因是使用后置通配符相对而言比前置通配符更方便筛选数据;

索引列比较

某一个表格table 的列A和B都建立了单独索引,查询条件用A=B则会导致索引失效;

索引列值出现null

如果索引列值为null,索引值得个数少于表的count(*),这样一来,执行计划都会扫描全表了,而不是单独扫描索引列;

在where条件中对索引列使用函数

在where条件中 对索引列使用部分函数会导致索引失效,因为大部分函数会改变索引列的值,所以并不方便优先完成对比

转换索引列的数据类型

对索引列的数据类型进行了转换也会造成索引失效

水平有限,能列举的就是这些,欢迎补充

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值