1、带有运算
2、使用函数
3、使用%XXX左模糊查询,因为mysql是最左原则,使用XXX%右模糊查询是可以使用索引的,但是左模糊违背了最左原则所以不行
4、使用范围运算,not in,in > ,<都不行
5、查询的字段不是索引的最左字段,同样是因为最左原则
6、字段类型不匹配,常见的隐式数据类型转换,mobile=1356不会走索引,会转换为字符串可以查询但是,mobile='1356’会走索引
7、or条件左边的是索引字段,右边的不是。也不会走索引,因为or是一个并集
索引失效场景
在分析索引失效场景之前,我们必须要清楚索引结构的特点是什么。关于 Mysql 的数据库索引结构在之前的文章中已经进行了详细的分析,可以参见之前的文章。
这样理解Mysql索引,阿里面试官也给你点赞
我们再来看下 Mysql 数据库索引的结构特点:
本文以 user_info 这张表来作为分析的基础,在 user_info 这张表上,我们分别创建了 idx_name 以及 idx_phone 二级索引以及 idx_age_address 联合索引。
1、字段类型不匹配导致的索引失效
进行 SQL 数据查询的时候,where 条件字段类型与实际表中字段类型不匹配的时候,Mysql 会进行隐式的数据类型转换,而类型转换会使用到内置函数ÿ