explain select语句
1.id
一组数字,表示执行select子句或者操作表的顺序
如果数组相同,顺序由上到下执行
如果数字不同,值越大,越先执行
id相同的可以认为是一组,id不同的值越大优先级越高
2.selectType
每个子句的类型
simple(简单查询,不包含子查询或者union)
primary(如果包含子查询,最外层标记为primary)
subquery(select或者where中的子查询)
union(若第二个select出现在union之后,则被标记为union)
derived(若第二个select出现在from中,则最外层标记为derived)
union result(从union表获取结果的select)
3.table
当前查询涉及的表
4.type
连接类型,找到所需行的方式
all 遍历全表
index 遍历索引树
range 索引范围扫描 between 大于 小于
ref (最佳左前缀)非唯一索引(表中有多条记录与之匹配)
eq_ref 唯一索引(表中仅有一条记录与之匹配)
const MySQL对查询进行优化,并转化成一个常量
system 查询的表只有一行
null 不用访问表或者索引
5.possible_keys
可能用到的索引
6.key
实际使用的索引
7.key_len
索引中使用的字节数
越短越好
该列表示的是索引字段的最大可能长度,并非实际使用长度。
是根据表的定义计算而得
8.ref
索引的哪一列被使用了,常数较好
9.rows
得到结果需要读取的行数
根据表的统计信息和索引的选用情况估算
10.extra
using index 使用了覆盖索引(包含所有满足查询需要的数据的索引,利用索引直接返回数据,不需要根据索引再次读取数据文件)
using where MySQL服务器在存储引擎收到记录后进行post filter后过滤
using temporary 使用临时表存储结果集(排序和分组时常见)需要优化
using filesort 在order by 时,无法使用索引进行排序而出现了文件排序。需要优化
using filesort、using temporary(常出现在使用order by时)时需要优化。
Using filesort 出现文件排序
Using temporary 使用临时表