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 使用临时表