--- layout: post title: explain输出格式 category: 技术 tags: Mysql keywords: description: 官方文档地址:https://dev.mysql.com/doc/refman/5.7/en/explain-output.html --- EXPLAIN语句提供了mysql怎么执行语句的相关信息。EXPLAIN 可以描述select,insert,update,delete,replace等语句的执行信息。[表8.1](#table8-1) 对于select语句使用到的每一张表,explain都会返回一行信息,而且是按照mysql在处理语句时读取的顺序列出这些表。 mysql使用内循环join的方法来解决所有的join操作,这意味着mysql从第一张表中读取一行数据,然后在第二张表中读取匹配的行,然后第三张,以此类推。当所有的表都被执行完时,mysql通过表列表输出选定的列和回溯,直到找到有更多匹配行的表。然后下一行从当前表中读取然后继续执行后面的表。 explain输出会包含分区信息。此外,对于select语句,explain会生成扩展信息,可以在explain之后显示show warnings(请看[Section 8.8.3, “Extended EXPLAIN Output Format”](https://dev.mysql.com/doc/refman/5.7/en/explain-extended.html))。 > **注意** > 在早期mysql版本总,分区和扩展信息是使用`explain partitionyu'fayufaexplain extended`产生的。那些语法因为向后兼容性仍然可用,但是分区和扩展输出默认是不开启的,所以`partitions`和`extended`关键字是多余的并且过期了。他们的使用会导致警告并且在未来的mysql版本中会从`explain`语法中移除。 > > 你不能在同一个`explain`语句中同时使用`partitions`和`extended`关键字。另外,这两个关键字的任何一个也不能和`format`操作一起使用。 ## explain输出列 该节描述了使用`explain`的输出列,后面的章节会介绍`type`和`extra`列额外的信息。 来自`explain`的每个输出行代表一张表的信息。每行包含[表8.1](#table8-1)中的值的概要,并且在该表格后会有更详细的描述。表格的第一列是列明,第二列是提供的与使用`format=json`等价的属性名显示 表8.1 |列名|json名|意义| |-----|-----|----| |[id](#id)|select_id|`select`标识符| |[select_type](#select_type)|NONE|`SELECT`的类型| |[table](#table)|table_name|输出行的表| |[partitions](#partitions)|partitions|匹配的分区| |[type](#type)|access_type|join类型| |[possible_keys](#possible_keys)|possible_keys|可能选择的索引| |[key](#key)|key|真实选择的索引| |[key_len](#key_len)|key_length|选择的key的长度| |[ref](#ref)|ref|列在索引上的参照| |[rows](#rows)|rows|被检查行的估值| |[filtered](#filtered)|filtered|通过表的条件过滤的行的百分比| |[Extra](#Extra)|None|额外信息| > **注意** > 为null的JSON属性在json格式化的`explain`输出中不显示。 - id(JSON name:select_id) `select`的标识符。这是查询中`select`的序列号。如果该行参照其他行的联合结果,该值可以为NULL。这种情况系,`table`列显示像``这样的值来表示该行的id值是M和N的并集 - select_type(JSON 那么:none) `select`的类型,可以是下标中显示的任何一个。JSON格式的explain将`select`类型显示为query_block的属性,除非是`SIMPLE`和`PRIMARY` |select_type的值|JSON名|意义| |---|----|----| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| - table - partitions - type - possible_keys - key - key_len - ref - rows - filtered - Extra