关于索引失效的情况

  • 1.like 以%开头,索引无效;当like前缀没有%,后缀有%时,索引有效。
  • 2.or语句前后没有同时使用索引。当or左右查询字段只有一个是索引,该索引失效,只有当or左右查询字段均为索引时,才会生效
  • 3.组合索引,不是使用第一列索引,索引失效。(联合索引的最左匹配原则)
  • 4.数据类型出现隐式转化。如varchar不加单引号的话可能会自动转换为int型,使索引无效,产生全表扫描。(如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不会使用索引),
  • 5.在索引列上使用 IS NULL 或 IS NOT NULL操作,索引不一定失效!!!???
  • 6.在索引字段上使用not,<>,!=。不等于操作符是永远不会用到索引的,因此对它的处理只会产生全表扫描。 优化方法: key<>0 改为 key>0 or key<0。
  • 7.对索引字段进行计算操作、字段上使用函数。(索引为 emp(ename,empno,sal))索引失效
  • 8.当全表扫描速度比索引速度快时,mysql会使用全表扫描,此时索引失效。
  • 9.用 != 或者 <> 导致索引失效
  • 10.字段类型不一致导致的索引失效
  • 11.字段编码类型不一致进行关联查询不走索引;如:SELECT * FROM a表  inner join b表  on a表.A字段=b表.B字段  ’;如果a表的A字段编码类型是utf8,b表B字段编码类型是utf8mb4,这是不走索引的。
  • 12.函数导致的索引失效;如:SELECT * FROM table WHERE DATE(create_time) = ‘2021-09-03’;如果使用函数在索引列,这是不走索引的。
  • 13.运算符导致的索引失效;如:SELECT * FROM table WHERE height/100 = 20;如果你对列进行了(+,-,*,/,!), 那么都将不会走索引。
  • 14.OR引起的索引失效;如:SELECT * FROM table WHERE name = ‘张三’ OR height = ‘175’;OR导致索引是在特定情况下的,并不是所有的OR都是使索引失效,如果OR连接的是同一个字段,那么索引不会失效,反之索引失效。
  • 15.模糊搜索导致的索引失效;如:SELECT * FROM table WHERE name LIKE ‘%五’;当%放在匹配字段左边是不走索引的,SELECT * FROM table WHERE name LIKE ‘张%’;放在右边才会走索引。
  • 16.NOT IN、NOT EXISTS导致索引失效
  • 17.联合索引不遵循最左前缀
  • 18.在索引字段上进行操作
  • 19.隐士的类型转化 比较VARCHAR 类型不加‘ ’
  • 20.在使用 in or 同一个索引字段时 可能不能走索引 这要根据表的大小 等因素来看是否会走索引
  • 21.范围查询 大于 小于 没走索引原因:mysql内部优化器会根据检索比例、表大小等多个因素整体评估是否使用索引。比如这个例子,可能是由于单次数据量查询过大导致优化器最终选择不走索引,优化方法:可以将大的范围拆分成多个小范围
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值