Mysql —— 索引的使用顺序

demo table

创建表

create table test(
   id int,
   v1 int,
   v2 int,
   primary key(id))
Engine=InnoDB DEFAULT CHARSET=UTF8;

该表的记录如下:


image.png

问题一:如果一条sql同时命中两个索引,那实际会用几个索引?

添加两个索引:

ALTER TABLE test
ADD INDEX idx_v1 (v1) USING BTREE ,
ADD INDEX idx_v1_v2 (v1, v2) USING BTREE ;

通过 explain 来查看:


image.png

会命中两条索引,但实际只用了 idx_v1,即使实际查询用联合索引更好,也依然只用了 idx_v1。

问题二:如果命中两个索引,到底会用哪一个?

之前的测试,发现用的是第一个,我们删除索引,把之前的索引语句顺序换一下:

ALTER TABLE test
ADD INDEX idx_v1_v2 (v1, v2) USING BTREE,
ADD INDEX idx_v1 (v1) USING BTREE ;

image.png

发现用的是第一个。

结论

  • 会依照索引添加的先后顺序,用最早添加的索引。即使是联合索引也依照这个规则。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容