在查询前加上 EXPLAIN 即可分析造成缓慢的地方。

其中有十个字段,分别如下:

  1. id
    • 查询中SELECT语句的序列号。如果该查询是子查询,则id的值可能会递增。
  2. select_type
    • SELECT的类型,可以是SIMPLE(简单SELECT,没有子查询或UNION)、PRIMARY(最外层的SELECT)、UNION(UNION中的第二个或之后的SELECT语句)、DEPENDENT UNION(UNION中的第二个或之后的SELECT语句,依赖于外部查询)、UNION RESULT(UNION的结果)、SUBQUERY(子查询中的第一个SELECT)、DEPENDENT SUBQUERY(子查询中的第一个SELECT,依赖于外部查询)等。
  3. table
    • 查询涉及的表名。
  4. type
    • 访问类型,即MySQL决定如何查找表中的行。常见的类型有:ALL(全表扫描)、index(索引全扫描)、range(索引范围扫描)、ref(使用非唯一索引或唯一索引的前缀进行的查找)、eq_ref(使用唯一索引的等值查找)、const/system(查询优化器能将查询转换为一个常量时)、NULL(优化器在执行时从索引中检索不到任何行)。
  5. possible_keys
    • MySQL可以使用哪些索引来优化查询。
  6. key
    • 实际上决定使用的索引。
  7. key_len
    • 使用的索引的长度。长度越短越好。
  8. ref
    • 显示哪些列或常量被用于索引查找。
  9. rows
    • MySQL估计为了找到所需的行而要检查的行数。
  10. Extra
    • 额外的信息,如Using index(使用了覆盖索引)、Using temporary(使用了临时表)、Using filesort(使用了外部索引排序)等,这些信息可以帮助理解查询的额外性能开销。

了解这些字段可以帮助分析和优化查询性能,特别是在处理大量数据和高并发场景时。