Mysql EXPLAIN 详细介绍
在MySQL中,使用EXPLAIN
语句可以分析查询语句的执行计划,以便了解MySQL是如何执行查询的。EXPLAIN
语句返回一系列关于查询执行计划的信息,其中包括以下常见的字段:
-
id:表示查询的标识符。如果查询中包含子查询,则每个子查询都有一个唯一的标识符。主查询的
id
值为1。 - select_type:表示查询的类型,常见的值包括:
- SIMPLE:简单查询,不包含子查询或UNION操作。
- PRIMARY:主查询,通常是复杂查询的最外层查询。
- SUBQUERY:子查询。
- UNION:UNION查询。
- DERIVED:派生表,表示在FROM子句中使用了子查询。
- …
-
table:表示查询涉及的表名。
-
partitions:表示查询涉及的分区。
- type:表示访问表的方式,常见的值包括:
- const:使用常数条件进行查询,仅返回一行结果。
- eq_ref:使用唯一索引或主键进行查询。
- ref:使用普通索引进行查询。
- range:使用范围索引进行查询。
- index:全表扫描,但只扫描索引树。
- all:全表扫描。
-
possible_keys:表示MySQL可以使用的索引,这些索引可能包括在查询中有效的索引。但不一定会被实际使用。
-
key:表示MySQL实际选择使用的索引。
-
key_len:表示MySQL在使用索引时使用的索引长度。对于复合索引,这个值是索引中使用的前缀长度。
-
ref:表示索引的匹配条件,例如常量、列名、表达式等。
-
rows:表示MySQL估计需要扫描的行数。
-
filtered:表示通过索引筛选的行的百分比。
- Extra:表示额外的查询信息,常见的值包括:
- Using where:表示MySQL使用了WHERE子句中的条件进行过滤。
- Using index:表示MySQL使用了覆盖索引,即只使用了索引而没有访问表数据。
- Using temporary:表示MySQL使用了临时表来处理查询结果。
- Using filesort:表示MySQL对结果进行了文件排序。
- …
理解这些字段的含义可以帮助您更好地分析查询执行计划,发现查询性能瓶颈,并进行优化。