id |
查询的唯一标识符。 |
通常是一个数字。对于复杂的查询(如包含子查询或 UNION),每个查询部分会有一个独立的 id。 |
select_type |
查询的类型。 |
SIMPLE: 简单查询,不包含 UNION 或子查询。<br>PRIMARY: 包含子查询或 UNION 的最外层查询。<br>SUBQUERY: SELECT 或 WHERE 子句中的子查询。<br>UNION: UNION 中的第二个或随后的 SELECT 语句。 |
table |
正在访问的表名。 |
表名或别名。如果是派生表(derived),会显示为 <derivedN>,其中 N 是 id。 |
partitions |
匹配的分区。 |
对于分区表,显示查询所匹配的分区。如果未分区,该值为 NULL。 |
type |
访问类型,是优化的关键。 |
ALL: 全表扫描,性能最差。<br>index: 全索引扫描,比 ALL 好,但仍需扫描整个索引树。<br>range: 范围扫描,通过索引检索指定范围的行,性能良好。<br>ref: 非唯一性索引扫描,找到多条匹配记录,性能良好。<br>eq_ref: 唯一性索引扫描,通常用于连接(join)操作,性能极佳。<br>const / system: 通过常量值进行匹配,只返回一行数据,性能最好。 |
possible_keys |
可能使用的索引。 |
列出 MySQL 认为可能可以用于查找的索引。这只是一个候选列表,不代表最终使用。 |
key |
实际使用的索引。 |
NULL: 没有使用任何索引,通常表示需要优化。<br>索引名:实际使用的索引名称。如果这个值在 possible_keys 中,说明优化器做出了正确的选择。 |
key_len |
实际使用的索引的长度。 |
表示索引中使用的字节数。对于复合索引,这个值可以帮助你判断索引使用了多少列。 |
ref |
索引中使用的列或常量。 |
显示与 key 列中的索引作比较的列或常量。例如,const 或 db.table.column。 |
rows |
估计要扫描的行数。 |
MySQL 估计的为了找到所需数据而需要读取的行数。这个值越小越好。 |
filtered |
通过表条件过滤的行百分比。 |
估计表或连接后,通过 WHERE 条件过滤后剩余的行数百分比。值越高越好。 |
Extra |
额外信息。 |
Using index: 覆盖索引,查询的所有数据都能在索引中找到,无需回表,性能极佳。<br>Using where: MySQL 使用 WHERE 子句来过滤结果。<br>Using filesort: MySQL 对结果进行排序,但无法通过索引完成,性能较差。<br>Using temporary: MySQL 创建了临时表来处理查询,通常是由于 GROUP BY 或 ORDER BY 无法利用索引,性能差。 |