文章目录
- 前言
- 实验
- 结论
前言
这部分很多帖子都只在问题里罗列下,好像也没详细解答
其实就是跟InnoDB优先走二级索引的优化有关,前面也提到了”优化的前提是查询语句中不包含where条件和group by条件“
还不太了解这个优化的朋友可以看上一篇帖子
实验
下面稍微做个小实验:
-- actor_id 为主键索引,last_name 为二级索引,first_name不是索引
explain select count(*) from actor;
explain select count(*) from actor where actor_id > 3;
explain select count(*) from actor where first_name like 'P%';
结果如下:
结论
可以看出:
加了where
条件约束会使”优先遍历较小的二级索引计数“的优化失效,具体策略跟约束的字段有关:
- 如果
where
的条件是一个主键索引的约束,会走主键索引 - 如果
where
的条件不是索引,则会直接全表扫描