作用:可以用于查看一个查询语句的执行计划。执行计划显示了MySQL优化器在执行查询时使用的算法和顺序,以及每个步骤所需的资源和时间。
EXPLAIN返回的执行计划包括以下列:
- id: 查询中每个操作步骤的唯一标识符。如果查询是复杂查询,则id值越大的步骤表示越深入嵌套的子查询。
- select_type: 操作类型,例如SIMPLE(简单查询)、PRIMARY(最外层查询)等。
- table: 表名。
- partitions: 用于检索行的分区列表。
- type: 连接类型,包括system、const、eq_ref、ref、range、index、all等。这是一个性能评估指标,性能从左向右递减。
- possible_keys: MySQL可以使用的索引列表。
- key: 实际使用的索引。
- key_len: 使用索引的长度。
- ref: 显示索引如何与表中的某一列相匹配。
- rows: 预计要扫描的行数。
- filtered: 按照WHERE条件过滤后留下的行数占总行数的比例。
- Extra: 包含其他信息,例如使用临时表、文件排序等。
其中,type列是最重要的列之一。根据查询所使用的连接类型,可以确定查询性能。以下是type列可能出现的值:
system:只有一行记录的表。
const:通过索引一次查找一行数据。
eq_ref:使用唯一索引查找相关的行。
ref:使用非唯一索引查找相关的行。
range:使用索引查找一定范围内的行。
index:完全扫描索引,而不是从数据文件中读取行。
all:完全扫描表,而不是使用索引。