IT评测·应用市场-qidao123.com

标题: MySql explain命令返回结果解读 [打印本页]

作者: 慢吞云雾缓吐愁    时间: 2023-10-7 19:09
标题: MySql explain命令返回结果解读
1. explain命令是什么东西?

explain 是MySql提供的SQL语句查询性能的工具,是我们优化SQL的重要指标手段,要看懂explain返回的结果集就尤为重要
2. explain命令返回列解读
  1. +----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+--------------------------------------------+
  2. | id | select_type | table   | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra                                      |
  3. +----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+--------------------------------------------+
  4. |  1 | PRIMARY     | SC      | NULL       | ALL  | NULL          | NULL | NULL    | NULL |   18 |    10.00 | Using where                                |
  5. |  1 | PRIMARY     | Student | NULL       | ALL  | NULL          | NULL | NULL    | NULL |   12 |    10.00 | Using where; Using join buffer (hash join) |
  6. |  2 | SUBQUERY    | Teacher | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    3 |    33.33 | Using where                                |
  7. |  2 | SUBQUERY    | Course  | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    3 |    33.33 | Using where; Using join buffer (hash join) |
  8. +----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+--------------------------------------------+
复制代码
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

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4