mysql执行计划中的extra字段

2019-12-18  本文已影响0人  乔治m2

对于mysql的执行计划,主要是针对select查询优化而备的,通过在查询语句前加explain就可以显示此次查询的执行计划,当然查询计划中包括了id,select_type,type...字段,这里不逐一论述,主要是extra字段里面的字段进行解释。

create table user1(
id int not null primary key,
age int not null,
height int not null,
weight int not null
) engine=Innodb;

-----------------------
create index myindex on user1(age,height,weight);

extra字段存在的值

NULL: 没有用到额外的附加条件

Using filesort:查询语句中包含了oder by语句,索引无法完成排序,数据量小的时候在内存中完成排序,否者在磁盘中完成排序。

Using temporary:使用到了临时表。

Using Index:使用覆盖索引进行数据返回(Innodb引擎才存在),不会进行回表查找。

Using Where:查询语句中存在where范围查找,会回表查找数据。

Using Where Using Index:覆盖索引中存在范围查找,但是也不会进行回表,直接在索引上就能拿到数据。

Using Index Condition:跟Using Where Using Index有一些差别,它的查找用到了联合索引,查找的数据有不在索引中的字段,所以会进行回表查找数据。

具体sql

先往表中插入数据

insert into user1(id,age,height,weight,name) values(1,4,3,1,'小太'),(2,1,2,7,'小计'),(3,1,5,2,'小红'),(4,2,1,8,'小明'),(5,1,5,2,'小弄');

null情况

explain select * from user1;
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
|  1 | SIMPLE      | user1 | ALL  | NULL         | NULL | NULL    | NULL |    5 | NULL  |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+

Using Index

explain select age,height,weight,id from user1 where age = 2 and height = 1 and weight = 8;
+----+-------------+-------+------+---------------+---------+---------+-------------------+------+-------------+
| id | select_type | table | type | possible_keys | key     | key_len | ref               | rows | Extra       |
+----+-------------+-------+------+---------------+---------+---------+-------------------+------+-------------+
|  1 | SIMPLE      | user1 | ref  | myindex       | myindex | 15      | const,const,const |    1 | Using index |
+----+-------------+-------+------+---------------+---------+---------+-------------------+------+-------------+

Using Where Using Index

explain select age,height,weight,id from user1 where age = 2 and height > 1 and weight = 8;
+----+-------------+-------+------+---------------+---------+---------+-------+------+--------------------------+
| id | select_type | table | type | possible_keys | key     | key_len | ref   | rows | Extra                    |
+----+-------------+-------+------+---------------+---------+---------+-------+------+--------------------------+
|  1 | SIMPLE      | user1 | ref  | myindex       | myindex | 5       | const |    1 | Using where; Using index |
+----+-------------+-------+------+---------------+---------+---------+-------+------+--------------------------+

Using Index Condition

explain select age,height,weight,name from user1 where age = 2 and height > 1 and weight = 8;
+----+-------------+-------+-------+---------------+---------+---------+------+------+-----------------------+
| id | select_type | table | type  | possible_keys | key     | key_len | ref  | rows | Extra                 |
+----+-------------+-------+-------+---------------+---------+---------+------+------+-----------------------+
|  1 | SIMPLE      | user1 | range | myindex       | myindex | 10      | NULL |    1 | Using index condition |
+----+-------------+-------+-------+---------------+---------+---------+------+------+-----------------------+
上一篇下一篇

猜你喜欢

热点阅读