首页 > 编程知识 正文

mysql索引在什么情况下失效,mysql避免索引失效

时间:2023-05-03 15:20:59 阅读:276326 作者:154

MySQL索引失效5种情况:

1.索引字段在查询时存在隐式的类型转换

比如student表有字段phone定义为vachar类型,且定义为辅助索引,当查询语句写成:

select id,name from student where phone = 18628562245

此时用explain 执行这条语句会发现存在Key = NULL说明没有用到phone这个索引

2.对索引字段使用LIKE左模糊匹配,左右模糊匹配

但是使用右模糊匹配是没有问题的

3. 对索引字段进行表达式计算

如age是二级索引:

select id,name from student where age+2=18;  4.索引字段使用函数表达式 select id,name from student where left(phone,3) = '133'

以上四种失效原因是改变了B树叶子节点的排列顺序,导致无法遍历原来的索引树。 

5.联合索引使用非最左索引

如存在联合索引index(age_name)

select id,name from student where name='zhangsan'

 由于存储引擎存在最左匹配原则因此导致索引失效

回表:添加了二级索引,二级索引也是一个B树,叶子节点存的是主键索引的值。二级索引查出来主键后又要去主键索引的B树中查纪录。这个过程就是回表。

索引覆盖:创建了联合索引后 ,如ndex(age_name),非叶子节点存的就是(age,name)这样的键值对,如果使用到age这个索引去查name时,只通过联合索引就能获得name就没必要再去遍历主键索引的树,直接得到。这个过程叫做索引覆盖。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。