mysql 存在索引但不能使用索引的典型场景

  1. 以%开头的LIKE查询不能够利用B-tree索引

解决办法 
先扫描索引 last_name获取满足条件的%NI%的主键actor_id列表,之后根据主键回表去检索记录,这样访问避开了全表扫描actor表产生的大量IO请求。

explain select * from (select actor_id from actor where last_name like '%NI%') a,actor b where a.actor_id = b.actor_id\G;
  1. 数据类型出现隐式转换

  2. 复合索引的情况下,查询条件不满足索引最左的原则

  3. Mysql估计使用索引比全表扫描慢

  4. 用or分割开的条件,or前条件有索引,or后的列没有索引

  5. 负向查询(not  , not in, not like, <>, != ,!>,!<  ) 不会使用索引

  6. 独立的列 索引 不能是表达式的一部分

猜你喜欢

转载自blog.csdn.net/qq_18800269/article/details/89920959