EXPLAIN给出MySQL如何执行SQL语句的信息,即执行计划。在5.6版本以前,EXPLAIN只能给出SELECT查询语句的执行计划。5.6进行了扩展,DML语句的执行计划也可以通过EXPLAIN查看。
mysql> EXPLAIN SELECT * FROM `information_schema`.`TABLES`\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: TABLES partitions: NULL type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: NULL filtered: NULL Extra: Open_full_table; Scanned all databases 1 row in set, 1 warning (0.00 sec)
1.id
SELECT编号。查询语句的序号。
2.select_type
SELECT类型。可能的取值如下。
- SIMPLE。简单SELECT(没有关联查询和子查询)。
- PRIMARY。最外层SELECT。
- UNION。关联查询中的二次或二次+SELECT。
- DEPENDENT UNION。关联查询中依赖于外层查询结果的二次或二次+SELECT。
- UNION RESULT。关联查询的结果。
- SUBQUERY。子查询中的首次SELECT。
- DEPENDENT SUBQUERY。子查询中依赖于外层查询结果的首次SELECT。
- DERIVED。衍生表SELECT(FROM子句中的子查询)。
- MATERIALIZED。物化查询。
- UNCACHEABLE SUBQUERY。外层查询结果的每条记录子查询都不能缓存而需要再次计算。
- UNCACHEABLE UNION。属于UNCACHEABLE SUBQUERY的关联查询中的二次或二次+SELECT。
3.table
输出行所关联的表名。
4.partitions
查询中记录所匹配到的分区。非分区表该值为NULL。
5.type
关联类型。内容较多参考早期的一篇拙劣译文http://blog.csdn.net/sweeper_freedoman/article/details/52819839。
6.possible_keys
possible_keys字段暗示MySQL可以选取哪些索引从该表中查找记录。
7.key
key字段指明MySQL实际上决定采用的索引。
8.key_len
key_len字段说明了MySQL决定采用的索引的宽度,可以以此判断MySQL实际上使用了组合索引的多少部分。
9.ref
ref字段输出了哪些字段或常量与key字段中列出的索引字段来比较而从表中查询记录。
10.rows
rows字段说明了MySQL认为执行查询需要检索的记录数。对于InnoDB表,这是一个预估值。
11.filtered
filtered字段是一个查询条件所能够过滤掉的表中记录的百分比预估值。
12.Extra
该字段包含了MySQL如何分解查询的额外信息。
参考:https://dev.mysql.com/doc/refman/5.7/en/explain-output.html