欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL索引最左匹配原则

程序员文章站 2022-04-05 23:38:30
...

一、explain 关键字

在弄懂MySQL索引的最左匹配原则之前,我们需要先了解一下 explain 关键字

我在学习explain关键字的时候找到了一张很好的图,但是我现在找不到出处了,只记得是在思否上面的,如果侵权联系我删掉

MySQL索引最左匹配原则


二、创建数据库

create table test(
a int ,
b int,
c int,
d int,
key index_abc(a,b,c)
)engine=InnoDB default charset=utf8;
DROP PROCEDURE IF EXISTS proc_initData;
DELIMITER $
CREATE PROCEDURE proc_initData()
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i<=10000 DO
    INSERT INTO test(a,b,c,d) VALUES(i,i,i,i);
    SET i = i+1;
END WHILE;
END $
CALL proc_initData();

这样我们就插入了1000条数据,和创建了a b c的联合索引


三、最左匹配原则

我们知道给字段创建了索引,只有我们使用了该字段,才会使用上索引,上面创建了联合索引 abc,假设我们不知道索引的使用规则,我们以最基本的思考,a、b、c,三个变量能够组合成多少种情况呢?

索引字段 具体使用 是否使用索引
a select * from test where a < 10
b select * from test where b < 10
c select * from test where c < 10
a、b select * from test where a < 10 and b < 10
b、a select * from test where b < 10 and a < 10
a、c select * from test where a < 10 and c < 10
c、a select * from test where c < 10 and a < 10
b、c select * from test where b < 10 and c < 10
c、b select * from test where c < 10 and b < 10
a、b、c select * from test where a < 10 and b < 10 and c < 10
a、c、b select * from test where a < 10 and c < 10 and b < 10
b、a、c select * from test where b < 10 and a < 10 and c < 10
b、c、a select * from test where b < 10 and c < 10 and a < 10
c、a、b select * from test where c < 10 and a < 10 and b < 10
c、b、a select * from test where c < 10 and b < 10 and a < 10

注:上面代码都是sql,如果你想验证是否使用索引,在sql前面加上explain关键字即可

从上面的表格中我们可以做如下总结(也就是最左匹配原则了)

  • 索引的使用只和字段有关,和字段的排序无关
  • 从上面我们可以得出,创建了4个索引,a、ab、ac、abc(注意排序无关)
  • 最左匹配原则就是只要使用到了组合索引的第一个,索引即可生效

本文参考:

https://www.cnblogs.com/applelife/p/10516277.html