
索引失效案例

全值匹配我最爱

当where条件的所有字段 都有 索引完全匹配时,效率最高
最左前缀规则(联合索引)

联合索引,在检索数据时从联合索引的最左侧开始匹配

主键插入顺序


计算/函数/类型转换(自动或手动) 导致索引失效


第1个SQL,要先进行计算,不会使用到索引
第2个SQL,等值匹配,使用索引
类型转换(自动或手动) 导致索引失效

name为varchar类型,第1个SQL会先将name进行类型转换,不会使用索引
范围条件右边的列索引失效(联合索引)
<, <=, >, >=, between...
联合索引的 范围条件字段 右侧字段 索引失效

由于where的classId是范围条件,仅使用 联合索引的 age+classId(key_len = 10)
不等于(!=或<>)索引失效

均索引失效
is null使用索引、is not null无法使用索引
![]()

like以%开头索引失效

第1个使用索引、第2个不使用索引

or前后存在非索引列,索引失效

数据库和表的 字符集 统一使用utf8mb4
![]()
