使用explain可以查看sql的执行过程
explain中包含的信息
- id
- type
- select_type
- rows
字段详解
id
查询时的序列号,一组数字
查询过程分为三种情况
- ID相同
- ID不同
- 存在相同ID和不同ID
相同
执行顺序自上而下
不同
id越大,优先级越高
同时存在
相同的ID可以看做为一组,ID越大的组,优先级越高
select_type
查询类型,用来区分是普通查询、联合查询、子查询等
- SIMPLE:简单查询
- PRIMARY:包含子查询时,最外层的都会标记为PRIMARY
- SUBQUERY:select或者where中包含的子查询
- DERIVED:from中包含的子查询
type
访问类型
system > const > eq_ref >
ref > fulltext > ref_or_null >
index_merge > unique_subquery > index_subquery >
range > index > ALL
一般来说,sql至少也达到range级别
system
表只有一行数据,这是const的特例,平时不会出现
const
单条件
通过索引一次就找到了,一般用于主键或者唯一索引
eq_ref
多条件
唯一性索引扫描,针对每个索引键,表中只有一条数据,常见于主键或唯一索引
ref
非唯一性索引扫描
rang
使用一个索引来进行范围扫描
index
all
遍历全表
possible_keys
查询涉及的字段存在索引,会列出,但不一定会使用
key
实际使用的索引,没有使用索引则用null
rows
大致估算查找数据所扫描的行数