几大索引失效原因
1.带头大哥不能死这局经典语句是说创建索引要符合最左侧原则。例如表结构为u_id,u_name,u_age,u_sex,u_phone,u_time创建索引为idx_user_name_age_sex。查询条件必须带上u_name这一列。
2.不在索引列上做任何操作不在索引列上做任何计算、函数、自动或者手动的类型转换,否则会进行全表扫描。简而言之不要在索引列上做任何操作。
3.俩边类型不等例如建立了索引idx_user_name,name字段类型为varchar在查询时使用where name = kaka,这样的查询方式会直接造成索引失效。正确的用法为where name = "kaka"。
4.不适当的like查询会导致索引失效创建索引为idx_user_name执行语句为select * from user where name like "kaka%";可以命中索引。执行语句为select name from user where name like "%kaka";可以使用到索引(仅在8.0以上版本)。执行语句为select * from user where name like ''%kaka";会直接导致索引失效
5.范围条件之后的索引会失效创建索引为idx_user_name_age_sex执行语句select * from user where name = 'kaka' and age > 11 and sex = 1;上面这条sql语句只会命中name和age索引,sex索引会失效。复合索引失效需要查看key_len的长度即可。总结:%在后边会命令索引,当使用了覆盖索引时任何查询方式都可命中索引。以上就是咔咔关于索引失效会出现的原因总结,在很多文章中没有标注MySQL版本,所以你有可能会看到is null 、or索引会失效的结论。
作者:咔咔
链接:https://www.zhihu.com/question/497684269/answer/2228717844
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。