EXPLAIN 命令在 MySQL 中用于分析查询的执行计划,以下是一些关键参数及其说明:
id: 查询中每个选择的标识符,表示查询的顺序和嵌套关系。
select_type: 查询的类型,包括:
SIMPLE: 简单查询,不使用子查询或联合。PRIMARY: 主查询,通常包含子查询。UNION: 联合查询。SUBQUERY: 子查询。DERIVED: 派生表,来自子查询。
table: 表示当前处理的表名。
type: 连接类型,表示查询的效率,常见的类型有:
ALL: 全表扫描,效率低。index: 索引扫描,较快。range: 范围扫描,使用索引。ref: 通过索引查找单个行。eq_ref: 对于每个行,通过索引查找单个行,效率最高。
possible_keys: 可能使用的索引列表。
key: 实际使用的索引。
key_len: 使用的索引长度。
ref: 显示使用的列或常量,表示索引的引用。
rows: MySQL 估计需要读取的行数。
filtered: 表示在应用条件过滤后,估计将被选择的行的百分比。
Extra: 额外信息,可能包括:
Using index: 表示只使用索引,没有访问表。Using where: 表示有条件过滤。Using temporary: 使用临时表。Using filesort: 结果需要排序。
Mysql8.0.18后引入的更详细的解析EXPLAIN ANALYZE
EXPLAIN ANALYZE 在 MySQL 8.0 及更高版本中用于提供更详细的查询执行计划和实际运行时间,它会执行查询并返回更准确的性能数据。以下是各类参数及其说明:
id: 查询中每个选择的标识符,表示查询的顺序和嵌套关系。
select_type: 查询的类型,如
SIMPLE、PRIMARY、UNION、SUBQUERY等。table: 当前处理的表名。
partitions: 如果表分区,显示相关分区的信息。
type: 连接类型,表示查询的效率:
ALL: 全表扫描。index: 索引扫描。range: 范围扫描。ref: 使用索引查找单个行。eq_ref: 通过索引查找单行,效率最高。
possible_keys: 查询中可能使用的索引列表。
key: 实际使用的索引。
key_len: 使用的索引长度。
ref: 显示使用的列或常量,表示索引的引用。
rows: MySQL 估计需要读取的行数。
filtered: 表示在应用条件过滤后,估计将被选择的行的百分比。
Extra: 额外信息,包括:
Using index: 只使用索引,没有访问表。Using where: 有条件过滤。Using temporary: 使用临时表。Using filesort: 结果需要排序。Using join buffer: 使用连接缓冲。
execution_time: 查询的实际执行时间。
actual_rows: 实际读取的行数。
loops: 查询执行的循环次数,表示操作的重复次数。