MySQL explain结果字段解释
在执行select语句前 加上 explain,可以获取对这条sql语句的解析,根据解析的内容,我们可以更清晰的了解sql的具体执行情况,从而可以有针对性的去优化。
1. id
id是执行本条select语句的序号,序号为sql语句的执行顺序。
比如 带有子查询的语句 EXPLAIN SELECT * FROM (SELECT * FROM A)
2. select_type
select类型, 有一下几种值
- simple 表示最简单的select
- primary 表示最外层的select,
- union 表示union 右边的select
- dependent union UNION中的第二个或后面的select语句
- union result union的结果
- 其他
3. table
表示所查询的表
4. type
type显示的是访问类型,是较为重要的一个指标,结果值从好到坏依次是:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
一般来说,得保证查询至少达到range级别,最好能达到ref。
- system
表仅有一行,这是const类型的特例,平时不会出现 - const
表最多有一个匹配航,const用于比较primary key 或者unique索引。因为只匹配一行数据,所以很快
一定要用到primary key 或者unique 并且质检所出两条数据的情况下才会是const 。???
- eq_ref
- ref
- ref_or_null
- index_merge
- unique_subquery
- index_subquery
- range
给定范围内的索引,使用一个索引来检查行 - index
5. possible_keys
提示使用哪个索引会在该表中找到行
6. keys
MySQL使用到的索引
7. ken_len
MySQL使用到的索引的长度
8. ref
ref列显示使用哪个列或常数与key一起从表中选择行
9. rows
显示mysql 执行查询的行数
10. Extra
该列包行MySQL解决查询的详细信息
- Distinct
- Not exists
- range checked for each record
- using filesort
- using index
- using temporary
- using where
- Using sor_union(...),Using union(...),Using intersect(...)
- Using index for group-by