Mysql —— 索引的使用顺序

demo table

创建表

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

该表的记录如下:
Mysql —— 索引的使用顺序_第1张图片

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

添加两个索引:

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

通过 explain 来查看:
Mysql —— 索引的使用顺序_第2张图片
会命中两条索引,但实际只用了 idx_v1,即使实际查询用联合索引更好,也依然只用了 idx_v1

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

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

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

在这里插入图片描述
发现用的是第一个。

结论

会依照索引添加的先后顺序,用最早添加的索引。即使是联合索引也依照这个规则。

参考链接 :
Mysql —— 索引的使用顺序 : https://www.jianshu.com/p/27da1c106157

你可能感兴趣的:(数据库)