文章目录
全值匹配
- 全值匹配
- 最左前缀原则
- 不在索引列上使用函数,会导致索引失效而转向使用全表扫描
- 范围条件右边的索引列会失效
- 尽量使用覆盖索引
- 使用不等于操作符无法使用索引
- is null,is not null 一般情况下也无法使用索引
- like 以通配符开头的,索引会失效
- 少用 or 或 in,MySQL 不一定使用索引
- 查询范围过大,可能不会使用索引
例如,字段 film_id、actor_id 组成联合索引 idx_film_actor_id,那么在查询条件中使用到联合索引的全部字段,则表示全值匹配。
最左前缀原则使用复合索引的前面字段,但是不能跳过使用后面的字段
不在索引列上使用函数,会导致索引失效而转向使用全表扫描 范围条件右边的索引列会失效 尽量使用覆盖索引 使用不等于操作符无法使用索引 is null,is not null 一般情况下也无法使用索引 like 以通配符开头的,索引会失效mysql> select * from user where name like 'hello%'; -- 会使用索引,索引值的前面5个字符在索引树中是有序的
mysql> select * from user where name like '%hello'; -- 不会使用索引,索引值的后面的若干个字符在索引树中是无序的,所以无法使用索引
解决 like ‘%字符串%’ 索引不被使用的方法:
如果 in (…) 里面的字段不要太多也许会使用索引,or 也是一样;如果指定过多的字段,那么 MySQL 就会扫描索引树多次,所以可能会放弃使用索引
查询范围过大,可能不会使用索引select * from user where age >= 1 and age
关注
打赏