Explain是什么
Explain也称“执行计划”,使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句,可以用来分析你的查询语句或是表结构的性能瓶颈
Explain的用法
语法
Explain+SQL语句
执行完后会返回执行计划,如下图所示
执行计划的各字段的解释
id | list | descriptive |
---|---|---|
1 | id | select查询的序列号,包含一组数字,表示查询中执行select子句的顺序 |
2 | select_type | 显示查询的类型 |
3 | table | 查询的表 |
4 | type | 显示查询使用了何种类型 |
5 | possible_key | 显示可能应用在这张表中的索引,一个或多个 |
6 | key | 实际使用的索引 |
7 | key_len | 表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度 |
8 | ref | 显示索引的哪一列被使用了,如果可能的话,是一个常数 |
9 | rows | 根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取的行数 |
10 | Extra | 额外的重要信息 |
partitions是分区的意思
id
有三种情况
- id相同,执行顺序由上至下
- id不同,如果是子查询,id的序号会递增
- id相同和不同同时存在
id值越大,优先级越高,越先被执行
select_type
id | select_type | description |
---|---|---|
1 | SIMPLE | 不包含任何子查询或union等查询,也就是基本查询 |
2 | PRIMARY | 包含子查询最外层查询显示PRIMARY |
3 | SUBQUERY | 在select或where子句中包含的查询 |
4 | DERIVED | from字句中包含的查询 |
5 | UNION | 出现在union后的查询语句中 |
6 | UNION RESULT | 从UNION中获取结果集 |
type
id | type | description |
---|---|---|
1 | system | 单表单行数据查询 |
2 | const | 通过主键和unique索引查询一条数据 |
3 | eq_ref | 唯一索引扫描一条记录 |
4 | ref | 非唯一索引,一个索引有多条记录 |
5 | rang | 索引范围查询 |
6 | index | 全表索引查询 |
7 | ALL | 全表扫描查询 |
从最好到最差依次是:
system>const>eq_ref>ref>range>index>ALL