1、Explain关键字介绍
在 MySQL 中,使用 EXPLAIN
关键字可以查看查询的执行计划,了解查询在数据库内部的处理过程。EXPLAIN
语句会返回一组列,每一列都提供了关于查询执行的详细信息。
2、Explain中的列
以下是 EXPLAIN
输出的各列的详细说明:
1.id
- 这是查询的序列号,表示执行计划中每个查询的顺序
- 示例:
1
2.select_type
- 指定查询的类型,例如简单查询、联合查询或子查询
- 可能的值:
SIMPLE
、PRIMARY
、UNION
、SUBQUERY
、DEPENDENT SUBQUERY
等 - 示例:
SIMPLE
3.table
- 表示查询中涉及的表名或别名
- 示例:
users
4.type
- 访问类型,表示 MySQL 查找行的方式
- 可能的值:
system
、const
、eq_ref
、ref
、range
、index
、ALL
- 依次从最优到最差分别为:system > const > eq_ref > ref > range > index > ALL
- 示例:
ref
5.possible_keys
- 查询可能使用的索引列表
- 示例:
PRIMARY, user_id
6.key
- 实际使用的索引
- 示例:
PRIMARY
7.key_len
- 使用的索引的长度
- 示例:
4
8.ref
- 显示列的内容与索引比较
- 示例:
const, u.id
9.rows
- MySQL 估计要读取的行数
- 示例:
100
10.filtered
- 表示查询条件过滤掉的行的百分比
- 示例:
100.00
11.Extra
- 提供额外的信息,描述查询执行中的细节
- 可能的值:
Using where
、Using temporary
、Using filesort
等 - 示例:
Using where
3、Explain的使用
假设我们有如下查询:
EXPLAIN SELECT o.id, u.name
FROM orders o
JOIN users u ON o.user_id = u.id
WHERE u.status = 'active'
可能的 EXPLAIN 输出如下:
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
|----|-------------|--------|--------|---------------|------------|---------|----------|------|----------|-------------|
| 1 | SIMPLE | u | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | Using where |
| 1 | SIMPLE | o | ref | user_id | user_id | 4 | u.id | 5 | 100.00 | |
各列解释:
- id: 1,表示这是查询中的第一步
- select_type: SIMPLE,表示这是一个简单查询,没有子查询或联合查询
- table: u,表示查询涉及 users 表
- type: const,表示对 users 表的查找是通过主键进行的,效率很高
- possible_keys: PRIMARY,表示可能使用的索引是主键
- key: PRIMARY,表示实际使用的索引是主键
- key_len: 4,表示使用的索引长度是 4 字节
- ref: const,表示使用常量值与索引列进行比较
- rows: 1,表示 MySQL 估计需要读取一行数据
- filtered: 100.00,表示查询条件没有过滤掉任何行
- Extra: Using where,表示查询条件中的 WHERE 子句正在使用
4、总结
通过分析 EXPLAIN
的输出,可以识别查询性能瓶颈,并进行优化。
例如,确保查询使用了适当的索引,避免全表扫描,从而提高查询性能