菜单

King 4836
发布于 2024-09-26 / 4 阅读
0
0

Explain解析

EXPLAIN 命令在 MySQL 中用于分析查询的执行计划,以下是一些关键参数及其说明:

  1. id: 查询中每个选择的标识符,表示查询的顺序和嵌套关系。

  2. select_type: 查询的类型,包括:

    • SIMPLE: 简单查询,不使用子查询或联合。

    • PRIMARY: 主查询,通常包含子查询。

    • UNION: 联合查询。

    • SUBQUERY: 子查询。

    • DERIVED: 派生表,来自子查询。

  3. table: 表示当前处理的表名。

  4. type: 连接类型,表示查询的效率,常见的类型有:

    • ALL: 全表扫描,效率低。

    • index: 索引扫描,较快。

    • range: 范围扫描,使用索引。

    • ref: 通过索引查找单个行。

    • eq_ref: 对于每个行,通过索引查找单个行,效率最高。

  5. possible_keys: 可能使用的索引列表。

  6. key: 实际使用的索引。

  7. key_len: 使用的索引长度。

  8. ref: 显示使用的列或常量,表示索引的引用。

  9. rows: MySQL 估计需要读取的行数。

  10. filtered: 表示在应用条件过滤后,估计将被选择的行的百分比。

  11. Extra: 额外信息,可能包括:

    • Using index: 表示只使用索引,没有访问表。

    • Using where: 表示有条件过滤。

    • Using temporary: 使用临时表。

    • Using filesort: 结果需要排序。

Mysql8.0.18后引入的更详细的解析EXPLAIN ANALYZE

EXPLAIN ANALYZE 在 MySQL 8.0 及更高版本中用于提供更详细的查询执行计划和实际运行时间,它会执行查询并返回更准确的性能数据。以下是各类参数及其说明:

  1. id: 查询中每个选择的标识符,表示查询的顺序和嵌套关系。

  2. select_type: 查询的类型,如 SIMPLEPRIMARYUNIONSUBQUERY 等。

  3. table: 当前处理的表名。

  4. partitions: 如果表分区,显示相关分区的信息。

  5. type: 连接类型,表示查询的效率:

    • ALL: 全表扫描。

    • index: 索引扫描。

    • range: 范围扫描。

    • ref: 使用索引查找单个行。

    • eq_ref: 通过索引查找单行,效率最高。

  6. possible_keys: 查询中可能使用的索引列表。

  7. key: 实际使用的索引。

  8. key_len: 使用的索引长度。

  9. ref: 显示使用的列或常量,表示索引的引用。

  10. rows: MySQL 估计需要读取的行数。

  11. filtered: 表示在应用条件过滤后,估计将被选择的行的百分比。

  12. Extra: 额外信息,包括:

    • Using index: 只使用索引,没有访问表。

    • Using where: 有条件过滤。

    • Using temporary: 使用临时表。

    • Using filesort: 结果需要排序。

    • Using join buffer: 使用连接缓冲。

  13. execution_time: 查询的实际执行时间。

  14. actual_rows: 实际读取的行数。

  15. loops: 查询执行的循环次数,表示操作的重复次数。


评论