美文网首页
最容易理解的索引失效的情况

最容易理解的索引失效的情况

作者: superNeil | 来源:发表于2020-09-01 15:10 被阅读0次
image.png

什么时候没用

1.有or必全有索引;
2.复合索引未用左列字段;
3.like以%开头;
4.需要类型转换;
5.where中索引列有运算;
6.where中索引列使用了函数;
7.如果mysql觉得全表扫描更快时(数据少);

什么时没必要用

1.唯一性差;
2.频繁更新的字段不用(更新索引消耗);
3.where中不用的字段;
4.索引使用<>时,效果一般;

详述(转)

索引并不是时时都会生效的,比如以下几种情况,将导致索引失效:

  • 如果条件中有or,即使其中有部分条件带索引也不会使用(这也是为什么尽量少用or的原因),例子中user_id无索引

注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引

  • 对于复合索引,如果不使用前列,后续列也将无法使用,类电话簿。
  • like查询是以%开头
  • 存在索引列的数据类型隐形转换,则用不上索引,比如列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引
  • where 子句里对索引列上有数学运算,用不上索引
  • where 子句里对有索引列使用函数,用不上索引
  • 如果mysql估计使用全表扫描要比使用索引快,则不使用索引

比如数据量极少的表

什么情况下不推荐使用索引?

  1. 数据唯一性差(一个字段的取值只有几种时)的字段不要使用索引

比如性别,只有两种可能数据。意味着索引的二叉树级别少,多是平级。这样的二叉树查找无异于全表扫描。

  1. 频繁更新的字段不要使用索引

比如logincount登录次数,频繁变化导致索引也频繁变化,增大数据库工作量,降低效率。

  1. 字段不在where语句出现时不要添加索引,如果where后含IS NULL /IS NOT NULL/ like ‘%输入符%’等条件,不建议使用索引

只有在where语句出现,mysql才会去使用索引

4) where 子句里对索引列使用不等于(<>),使用索引效果一般


image.png

相关文章

  • 最容易理解的索引失效的情况

    什么时候没用 1.有or必全有索引;2.复合索引未用左列字段;3.like以%开头;4.需要类型转换;5.wher...

  • 索引失效

    索引失效 只要我们了解索引是如何使用B+这个数据结构创建,那么就更容易理解下面索引失效的原因。 对staff表的(...

  • 索引失效的情况

    导致索引失效的案例1.建什么索引用什么索引,顺序也最好保持一致2.最佳左前缀索引名称命名(如字段name,age,...

  • 索引失效的情况

    1、组合索引不遵循最左匹配原则 2、组合索引前面索引列使用范围查询(<,>,like),会导致后续的索引失效 3、...

  • 索引失效情况

    在数据库表中,使用索引可以提高查询速度。但是索引并不是对所有的查询操作都会生效的。比如以下几种情况,将导致索引失效...

  • MySQL索引失效的情况

    查询的列中的值存在nullnull无法参与到索引建立的树中 列中的值较少(重复数据较多) 前导模糊搜索由于前面是模...

  • MySQL索引失效的情况

    Mysql索引查询失效的情况 首先,复习一下索引的创建: 普通的索引的创建: CREATE INDEX (自定义...

  • 简单介绍MySQL索引失效的几种情况

    这篇文章主要介绍了MySQL索引失效的几种情况,帮助大家更好的理解和使用MySQL索引,感兴趣的朋友可以了解下一....

  • 面试总结

    mysql 索引的类型、索引的底层结构、索引失效的情况聚簇索引和非聚簇索引mysql的隔离级别, innerdb默...

  • 11 索引优化

    创建表 索引失效的情况 如果索引多列,查询时最左边的列不能缺失

网友评论

      本文标题:最容易理解的索引失效的情况

      本文链接:https://www.haomeiwen.com/subject/mvsvsktx.html