关键词:explain 索引
EXPLAIN提供了关于MySQL如何执行语句的信息,即执行计划。可以用在SELECT、UPDATE、INSERT、REPLACE等语句前,本文主要讨论的是SELECT。通常使用EXPLAIN SELECT,结合分析返回结果,对SQL语句进行优化。
<文中案例操作使用的MySQL版本为:5.7.32,版本不同会存在差异>
比如下文中的例子,同样的查询语句,通过EXPLAINE查看执行计划,得到的结果有所不同。
5.1.73版本:
5.7.31版本:
从上面的两个结果比较可以看出,版本的不同,不仅仅是字段中的内容不同,而且,5.7.31版本要比5.1.73版本中多了两列:partitions、filtered。
█ 使用
以下结果截图,如果没有指明具体的版本,都是在5.7.31版本中执行后的结果。
①创建表和索引,并插入数据
drop table if exists STUDENT;
create table STUDENT(
id int primary key auto_increment,
car_id varchar(5),
first_name varchar(10),
last_name varchar(10),
class_id int,
index index_name(first_name, last_name)
);
create index index_car_id on STUDENT(car_id);
insert into STUDENT(car_id,first_name,last_name,class_id) values('111','Jim', 'Green',1);
insert into STUDENT(car_id,first_name,last_name,class_id) values('111','Dave', 'Brice',1);
insert into STUDENT(car_id,first_name,last_name,class_id) values('222','Ann', 'King',2);
insert into STUDENT(car_id,first_name,last_name,class_id) values('222','Rose', 'Rice',3);
insert into STUDENT(car_id,first_name,last_name,class_id) values('333','jack', 'ma',4);
drop table if exists CLASS;
create table CLASS(
id int primary key auto_increment,
name varchar(10)
);
create index index_name on CLASS(name);
insert into CLASS(name) values('语文');
insert into CLASS(name) values('数学');
insert into CLASS(name) values('英语');
![](https://i-blog.csdnimg.cn/blog_migrate/beab28b3b04b2f57b4305143c84004dd.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7e15b08ef42adc80767c64906cd8f1cf.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7705beb22b51de5d4573b025aa6d48c2.png)