一、explain 简介
explain 命令可以查看 SQL 语句的执行计划。当 explain 与 SQL 语句一起使用时, MySQL 将显示来自优化器的有关语句执行计划的信息。也就是说,MySQL 解释了它将如何处理语句,包括有关如何连接表以及以何种顺序连接表的信息。
- explain 能做什么
- 分析出表的读取顺序;
- 数据读取操作的操作类型;
- 哪些索引可以使用;
- 哪些索引被实际使用;
- 表之间的引用;
- 每张表有多少行被优化器查询。
explain 的使用很简单,只需要在 SQL 语句前加上 explain 命令即可。语法如下:
explain sql 语句
二、explain 结果解析
| 参数 | 描述 |
|---|---|
| id | 执行 sql 语句操作表的顺序 |
| select_type | 查询的类型,如 SIMPLE、PRIMARY、SUBQUERY、DERIVED、UNION 等 |
| table | 当前行使用的表名 |
| partitions | 匹配的分区 |
| type | 连接类型,包含 system、const、eq_ref、ref、range、index、all 。从左至右效率越来越差。 |
| possible_keys | 可能使用的索引 |
| key | 实际使用的索引 |
| key_len | 查询中使用的索引长度 |
| ref | 列与索引的比较 |
| rows | 扫描行数 |
| filtered | 悬泉的行数占扫描的行数的百分比,理想结果时100 |
| extra | 其他信息 |