1.explain 作用
通过id、table可以看出表的读取顺序,(小表驱动大表)
通过type字段查看索引的使用好坏情况
通过possible_keys和key 可以看是否使用了索引,使用了那些索引
通过extra 查看是否使用了Using_filesort 或者Using temporary
2.explain的字段 id select_type table type possible_keys key key_len ref rows extra
2.1 id
id 是和table一起使用的,表示查询中执行select子句或操作表的顺序
id相同,table执行顺序由上至下
id不同,如果是子查询,id的序号会递增,id值由大到小执行
2.2.select_type
1.simple 简单select 查询,查询中不包含子查询或者union
2.primary 包含复制查询是,最后被查询的表
3.subquery 子查询
4.derived 在from后面包含的子查询被标记为子derived(衍生) mysql 会递归执行这些子查询,把结果放在临时表中
5.union
6.union result
2.3.type
使用索引的类型
All 没有使用索引
system>const>eq_ref>ref>range>index>All
大部分情况都是 ref,range,index
ref 用到了索引返回了唯一的值
range 用到了索引返回了多个值
2.4possible_keys key
possible_keys 可能会使用到的索引
key 实际使用到的索引
key_len 索引占用的字节数,同样查询结果的情况下,值越小越好
ref 使用了索引上的那些列,或者是常量
rows 查询表使用的行数
2.4.extra
Using_filesort 排序没有用到索引的就会使用文件外排序
Using temporary 使用临时表,经常使用在orderby 和group by中
Using index 这种情况比较好