语法说明: explain + 数据库查询语句
一个典型的数据库执行计划的返回结果如下图所示

该返回结果的每个字段的含义如下表所示:
| 字段名 | 含义 |
|---|---|
| id | select查询的序列号,代表先后顺序 |
| select_type | 主要是区别普通查询和联合查询、子查询之类的复杂查询 |
| table | 显示这一行的数据是关于哪张表的 |
| type | 显示表之间的连接类型,由好到差:const > eq_reg > ref > range > index > all |
| possible_keys | 显示可能应用在这张表中的索引 |
| key | 实际使用的索引,若为null,则没有使用索引 |
| key_len | 使用的索引的长度,在不损失精度的情况下,长度越短越好 |
| ref | 显示索引的哪一列被使用过,如果可能的话,是一个常数 |
| rows | MYSQL认为必须检查的用来返回请求数据的行数 |
| Extra | 关于MySQL如何解析查询的额外信息 |
Extra列返回的描述符的意义
| 字段内容 | 代表含义 |
|---|---|
| Distinct | 一旦MySQL找到了与行匹配的行,就不在继续搜索了 |
| Not exists | MySQL优化了LFET JOIN,一旦它找到了匹配LEFT JOIN标准的行,就停止搜索 |
| Range Checked for each Record | 没有找到理想的索引 |
| Using filesort | 看到这个的时候,查询就需要优化了,MySQL采取了外排序,速度很慢 |
| Using index | 这发生在对表的全部的请求列都是同一个索引的部分的时候 |
| Using temporary | 这里,MYSQL需要创建一个临时表来存储结果,会占用额外空间 |
| Where used | 使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。如果不想返回表中的全部行,并且连接类型ALL或index,这就会发生,或者是查询有问题不同连接类型的解释(按照效率高低的顺序排序) |
浙公网安备 33010602011771号