explain是mysql中的一个关键字可以分析sql查询的是如何执行的。
1 | explain sql语句 |
id
- id代表sql执行的顺序,id值越大越被优先执行。
- id相同代表顺序执行。
select_type
- simple 简单查询,不包含子查询和union查询
- primary 包含子查询,最外层就是primary
- subquery 在SELECT或WHERE列表中包含了子查询
- derived 在FROM列表中包含的子查询被标记为DERIVED(衍生),MySQL会递归执行这些子查询,把结果放在临时表中
- union 若第二个SELECT出现在UNION之后,则被标记为UNION:若UNION包含在FROM子句的子查询中,外层SELECT将被标记为:DERIVED
- union result 从UNION表获取结果的SELECT
table
- 当前查询的表
type
- system 表仅有一行数据
- const 一次索引就找到结果
- eq_ref 关联查询使用了唯一索引
- ref 匹配了多个索引
- range 扫描了部分索引
- index 扫描了全表索引
- all 没有使用索引并且扫描了全表
1
system > const > eq_ref > ref > range > index > all
possible_keys 提示使用哪个索引会在该表中找到行
keys 使用哪些索引,没使用为null
key_len 索引使用的字节数,值越小越好。
ref 显示索引的哪一列被使用
rows sql执行需要读取的行数,值越小越好