很多面试官可能都不知道,mysql不满足最左原则,真的会导致索引失效吗?

前言

之前很多面试都被问过联合索引不匹配最左原则失效的问题,当时一直以为只要不满足最左原则,联合索引就会失效,面试官也没有反馈过有什么问题,今天突然发现一条sql并没有遵循最左原则,但还是用到了联合索引。

测试

表结构:

name和age字段建立联合索引

查询覆盖索引命中的字段:

explain select age from test where age = 2644;

 查询count(*) (不查询具体字段):

explain select count(*) from test where age = 2644;

查询非覆盖索引的字段:

explain select status from test where age = 2644;

扫描二维码关注公众号,回复: 10303131 查看本文章

结论

  • 查询非覆盖索引字段时,不会使用索引
  • 查询覆盖索引字段时,会使用索引,但是扫描的行数仍然是全表,之所以使用索引,是因为索引大小<全表大小(前提是覆盖索引不是全部字段),所以可以有效减少IO,查询优化器仍然会利用索引。
  • 查询count(*)原理同上
发布了253 篇原创文章 · 获赞 46 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/why444216978/article/details/105165794