我是靠谱客的博主 迷路发箍,最近开发中收集的这篇文章主要介绍mysql-索引失效场景,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

失效场景:

  1. 全表查询的情况会造成索引失效
  2. 范围查询右边的列,计算式有索引也不能使用索引查询。
  3. 负责索引,不满足最左前缀法则。
  4. where条件中,索引字段使用函数
  5. 如果是字符串类型的索引字段,不加单引号,造成索引失效。
  6. 索引字段和where条件字段类型不相等,也会造成索引失效。
  7. 两个不同的索引字段使用or进行连接,就会造成全表扫描。
  8. 使用like如果前面加%和前后面都加%,不做索引
  9. 如果某个索引的字段,该字段大部分内容都是一个值,此时,全表扫描就会比索引更快,当查询这一个值的话就会走全表扫描;
  10. 如果索引字段绝大部分都是null,is null查询条件就会走全表扫描。
  11. not in 索引失效。

索引用到不足的情况:

如果是查询多个单列索引字段,只会用一个最优的索引字段(辨识度最高),如果是复合索引的情况,满足最左前缀法则,就会是多个索引字段检索。

避免方式:

  1. 尽量不使用模糊查询,使用全值匹配。
  2. 最左前缀法则: 使用复合索引,必须按照创建索引的顺序从最左边的列, 连着查询,中间不能有空余字段, 像爬楼梯一样,从1层想直接上3层是不行的,必须要走2层, 但是where条件的顺序没有关系,只是where条件必须包含。
  3. 范围查询右边的列,不能使用索引查询。
  4. 保证索引字段和检索条件类型的相等。
  5. 尽量不使用select * ,尽量使用查询需要的字段。
  6. 如果光用到了索引字段来显示数据,那就只使用索引字段,这就叫覆盖索引 因为,根据索引查询,第一次是先去索引结构的记录里面查询数据,再通过查询的数据回表查询, 如果是只用到了索引字段,那就只需要在索引里面查出数据就可以了。
  7. like使用的索引字段时,尽量后面加% 如果like前后必须都加%。
  8. 使用索引当中的列作为返回结果,也叫覆盖索引。
  9. 检索条件尽量使用搜索引擎相关的框架来实现。

最后

以上就是迷路发箍为你收集整理的mysql-索引失效场景的全部内容,希望文章能够帮你解决mysql-索引失效场景所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部