MySQL执行计划

id 表的读取顺序

执行优先级,id相同从上到下依次执行,id不同,id从大到小依次执行

select_type 查询类型

simple 简单查询,不包含子查询,union

primary 最外层的查询 ,鸡蛋壳,查询中包含任何复杂的子查询时,最外层的查询。

subquery 在select 或 where中包含的子查询

derived 在from中包含的子查询被标记为derived(衍生)MySQL会递归的执行这些子查询,把结果放在临时表。derived后的数字即为id

union 若第二个select 出现在union之后则被标记位union;若union包含在from子句的查询中,外层select 被标记未derived;

union result 两个union合并的结果集

type

从最好到最差
system 》 const 》 eq_ref》 ref 》 range 》 index 》all

  • system
    单表单行记录,等价于系统表

  • const
    表示通过索引一次找到了记录,const用于比较主键列或唯一索引列,索引很快,如果主键置于where中,MySQL就可以把该查寻替换为一个常量。

  • eq_ref
    唯一性索引扫描,对于每个索引键,表中只有一条记录与之对应
    select * from t1,t2 where t1.id=t2.id

  • ref
    非为一性索引扫描, 返回返回匹配某个单独值的所有行;
    select * from t where col = ’s';

  • range
    只检索给定范围的行key显示用了那和索引,一般是在where中出现了范围查询,它开始于索引的一点,结束语索引的另一个点,比全表扫描快。
    select * from t where id between 1 and 10;

  • index
    Full index scan 全索引扫描
    index和all的区别为index只遍历索引树,通常比all快,因为索引文件更小。都是都全表。
    select id from t1;

  • all
    全表扫描;

possible keys

可能用到的索引。

key

实际用到的索引,为null 表示没有用到索引。或者没建立索引
拆卸像那种若使用到了覆盖索引,则该索引只出现在key这一列中;

key_len

表示索引中使用到的字节数,可通过该列计算查询寻中使用到额索引的长度,再不损失精度的情况下,用的越少越好。
显示的值为索引字段的最大长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的。
比如:col1 列 索引长度13,col2 列 索引长度13 where col1 = ‘ss’ key_len = 13 where col1 = 'a' and col2 ='s' key_len = 26

ref

type 为 ref/eq_ref 时
显示哪一列被使用了,如果可能的话,最好是一个常数。
库.表.字段 const

rows

根据表统计信息和索引使用情况,大致估算出找到所需记录所需要读取的行数

filterd

过滤掉了多少行

extra

  • using filesort 需要优化
    说明 MySQL会对数据使用一个外部的索引排序, 而不是按照表内的索引顺序进行读取。MySQL中无法使用索引完成的排序操作成为文件排序。
  • using tempory 必须优化
    使用了临时表保存中间结果,MySQL对查询结果排序时使用临时表,常见于order by group by
  • using index 覆盖索引(查询的列被所建的索引覆盖)
    表明使用了发覆盖索引,避免访问数据行(回表)
    如果出现了using where 说明索引被用来执行索引键值的查找;
    如果没有using where 说明索引直接用来读取数据。
  • using where
    表明使用了where 过滤
  • using join buffer
    使用了连接缓存,
  • impossible where
    where 子句的值总是false,不能用来获取元素。
    where id= 1 and id = 3;
  • select tables optmized away
    没有group by 子句的情况下,基于索引min/max操作或者对于myisam存储疫情优化count(*),不必等到执行阶段计算,查询执行计划生成的阶段即可完成优化。
  • distinct
    找到第一个匹配的时候就返回。

你可能感兴趣的:(MySQL执行计划)