电脑系统 | win 10 |
数据库版本 | mysql 8.0 官方文档 |
navicat | 11.1.13 |
参考:
执行计划:
方法
两种方法都行:下面例子使用第一种;
1、在sql 语句前添加 EXPLAIN
EXPLAIN select * from user

2、输入sql 然后点击 工具栏中的' 解释'

结果列说明 :
id : select 查询序号,id越大的语句越先执行;
select_type: select查询类型;
- SIMPLE : 常见的类型(不使用UNION或子查询);
- PRIMARY:在嵌套的查询中是最外层的SELECT语句,在UNION查询中是最前面的SELECT语句。
- UNION: UNION中第二个以及后面的SELECT语句。
- UNION RESULT: UNION 的结果。
- DEPENDENT UNION:满足UNION的条件,及UNION中第二个以及后面的SELECT语句,同时该语句依赖外部的查询。
- SUBQUERY:子查询中第一个SELECT语句。
- DEPENDENT SUBQUERY:在子查询中,依赖于外部查询。
- DERIVED: 派生表SELECT语句中FROM子句中的SELECT语句。
table : 输出的行所引用的表,可能是别名。
partitions:记录将与查询匹配的分区。
type:连接类型。
- system:这是const连接类型的一种特例,表仅有一行满足条件。
- const : 只有一行,MySQL优化器会在查询前读取它而且只读取一次,因此非常快。const只会用在将常量和主键或唯一索引进行比较时,而且是比较所有的索引字段。(图一)
- range:只检索给定范围的行,使用一个索引来选择行。key列显示使用了哪个索引。key_len包含所使用索引的最长关键元素。在该类型中ref列为NULL。当使用=、<>、>、>=、<、<=、IS NULL、<=>、BETWEEN或者IN操作符,用常量比较关键字列时,可以使用range:
EXPLAIN SELECT * from user where id =1 or id =2
- all: 最慢的一种方式,即全表扫描(图二)。
possible_keys:MySQL可以选择在此表中查找行的索引。
key:显示MySQL实际决定使用的键(索引)。如果没有选择索引,键是NULL。要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。
key_len:显示MySQL决定使用的键长度。如果键是NULL,则长度为NULL。使用的索引的长度。在不损失精确性的情况下,长度越短越好
ref: 该ref
列显示哪些列或常量与列中指定的索引进行比较,以 key
从表中选择行。
rows :该rows
列指示MySQL认为必须检查以执行查询的行数,对于InnoDB
表格,此数字是估算值。
filtered:该filtered
列指示将按表条件过滤的表行的估计百分比。最大值为100,这意味着不会对行进行过滤。值从100开始减少表示过滤量增加。 rows
显示检查的估计行数,rows
×filtered
表示将与下表连接的行数。例如,如果 rows
是1000并且 filtered
是50.00(50%),则使用下表连接的行数是1000×50%= 500。
extra:输出包含MySQL解决查询的额外信息.
- Using index :说明查询是覆盖了索引的,这是好事情。MySQL直接从索引中过滤不需要的记录并返回命中的结果。这是MySQL服务层完成的,但无需再回表查询记录。
- Using Filesort:一般出现在 使用了 order by 语句当中,并不是说通过磁盘文件进行排序. (age 是索引)
请注意这个不走索引 解决方法在下面:
EXPLAIN SELECT * FROM user ORDER BY age desc
方法一、select 只查询索引字段,order by 索引字段会用到索引,要不然就是全表排列;
方法二、加上where 条件,where 索引字段
- Using index condition 这是MySQL 5.6出来的新特性,叫做“索引条件推送”。简单说一点就是MySQL原来在索引上是不能执行如like这样的操作的,但是现在可以了,这样减少了不必要的IO操作,但是只能用在二级索引上,详情点这里。
- Using where:使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。
注意:Extra列出现Using where表示MySQL服务器将存储引擎返回服务层以后再应用WHERE条件过滤。
- Backward index scan(反向扫描): 8.0 版本的新特性。大牛的文章