MYSQL使用Explain生成的结果分别表示的意思
- EXPLAIN 是 MySQL 数据库提供的一个查询分析工具,用于分析查询语句的执行计划和性能。
- EXPLAIN 的结果是一张表格,显示了 MySQL 查询优化器如何执行查询,并提供了关于查询计划的详细信息。
字段名 | 含义 |
---|---|
id |
查询的唯一标识符,可以作为查询计划树的节点标识 |
select_type |
查询类型,包括 SIMPLE(简单查询)、PRIMARY(最外层查询)、SUBQUERY(子查询)、DERIVED(派生表查询)等 |
table |
此查询操作的表 |
partitions |
查询操作涉及的分区 |
type |
查询操作使用的访问类型,如 ALL(全表扫描)、INDEX(索引扫描)、RANGE(范围扫描)、REF(基于索引的连接)、EQ_REF(唯一性索引的连接)等 |
possible_keys |
可能被用到的索引 |
key |
实际使用的索引 |
key_len |
实际使用的索引长度 |
ref |
对于联接操作,表示连接使用的列 |
rows |
预估的扫描行数 |
filtered |
表示查询结果的过滤程度,值越低表示过滤越少 |
Extra |
额外的信息,如 Using where(使用了 WHERE 条件), Using index(使用了索引)、Using temporary(使用了临时表)等 |
以下是一个示例的 EXPLAIN 结果表格:
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-----------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-----------------------+
| 1 | SIMPLE | users | NULL | ALL | NULL | NULL | NULL | NULL | 100 | 10.00 | Using where |
| 1 | SIMPLE | orders| NULL | ref | user_id | user_id | 4 | users | 50 | 50.00 | Using index condition |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-----------------------+
这个例子中有两个查询操作:
- id 字段分别为 1,表示它们是两个独立的查询。
- select_type 分别为 SIMPLE,表示它们是简单查询。
- table 字段分别为 users 和 orders,表示查询涉及的表
- type 分别为 ALL 和 ref,表示第一个查询使用了全表扫描(ALL),而第二个查询使用了索引引用(ref)操作。
- possible_keys 分别为 NULL 和 user_id,表示可能被用到的索引。
- key 分别为 NULL 和 user_id,表示实际使用的索引。
- key_len 分别为 NULL 和 4,表示实际使用的索引长度。
- ref 分别为 NULL 和 users,表示连接使用的列。
- rows 分别为 100 和 50,表示预估的扫描行数。
- filtered 分别为 10.00 和 50.00,表示查询结果的过滤程度。
- Extra 分别为 Using where 和 Using index condition,表示额外的信息,如使用了 WHERE 条件和索引条件。
注:需要注意的是,EXPLAIN 的结果可能会根据查询语句、数据库结构和数据分布等因素而有所不同,因此对于不同的查询,EXPLAIN 的结果也会有所差异。可以根据 EXPLAIN 的结果来进行查询性能优化,例如优化索引、重写查询语句、调整数据库结构等,以提高查询性能。