Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySql explain命令

MySql explain命令返回结果详细介绍

作者:isyues

explain 是MySql提供的SQL语句查询性能的工具,是我们优化SQL的重要指标手段,要看懂explain返回的结果集就尤为重要,这篇文章主要介绍了MySql explain命令返回结果解读,需要的朋友可以参考下

1. explain命令是什么东西?

explain 是MySql提供的SQL语句查询性能的工具,是我们优化SQL的重要指标手段,要看懂explain返回的结果集就尤为重要

2. explain命令返回列解读

+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+--------------------------------------------+
| id | select_type | table   | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra                                      |
+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+--------------------------------------------+
|  1 | PRIMARY     | SC      | NULL       | ALL  | NULL          | NULL | NULL    | NULL |   18 |    10.00 | Using where                                |
|  1 | PRIMARY     | Student | NULL       | ALL  | NULL          | NULL | NULL    | NULL |   12 |    10.00 | Using where; Using join buffer (hash join) |
|  2 | SUBQUERY    | Teacher | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    3 |    33.33 | Using where                                |
|  2 | SUBQUERY    | Course  | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    3 |    33.33 | Using where; Using join buffer (hash join) |
+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+--------------------------------------------+

2.1 id

一个编号,表示select所属的行。如果查询中没有子查询或关联查询,那么只会有唯一的SELECT,每一行的该列中都将显示一个1,否则,内层的SELECT语句一般会顺序编号,对应于其在原始语句中的位置。id越大执行优先级越高,id相同则认为是一组,从上往下执行,id为NULL最后执行

2.2 select_type

查询类型,表示当前SQL语句是简单查询还是复杂查询

2.3 table 正在访问哪个表

2.4 partitions 如果当前数据表是分区表,则表示查询结果匹配的分区

2.5 type (重要)

其取值从最优到最差依次为:

null > system > const > eq_ref > ref > fulltext > ref_or_null > index_merge> unique_subquery > index_subquery > range > index > ALL

2.6 possible_keys

执行查询语句时可能用到的索引,但是在实际查询中未必会用到。当此列为NULL时,说明没有可使用的索引,此时可以通过建立索引来提高查询的性能。

2.7 key (重要)

执行查询语句时MySQL实际会使用到的索引。如果MySQL实际没有使用索引,则此列为NULL。

2.8 key_len (重要)

执行查询语句时实际用到的索引按照字节计算的长度值,可以通过此字段计算MySQL实际上使用了复合索引中的多少字段。如果key列值为NULL,则key_len列值也为NULL。

2.9 ref

数据表中的哪个列或者哪个常量用来和key列中的索引做比较来检索数据。如果此列的值为func,则说明使用了某些函数的结果数据与key列中的索引做比较来检索数据。

2.10 rows (重要)

查询数据时必须查找的数据行数,当数据表的存储引擎为InnoDB时,值为MySQL的预估值。

2.11 Extra

在执行查询语句时额外的详细信息

到此这篇关于MySql explain命令返回结果解读的文章就介绍到这了,更多相关MySql explain命令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文