Mysql Explain 参数解释

查询计划使用以及使用说明

  1. table:显示这一行数据是关于哪张表的。
  2. type:显示使用了何种类型,从最好到最差的连接类型为system、const、eq_ref、ref、fulltext、ref_or_null、index_merge、unique_subquery、index_subquery、range、index、all
    • const、system、null:当mysql能对查询的部分就行优化,并且转换成一个常量的时候,它就会使用这种访问类型了。比如你把一行的主键当做where条件放进去,那mysql就可以把它转换成一个常量,然后查询.
    • eq_ref:通过索引列,直接引用某1行数据(精确到一行数据中)常见于连接查询中
    • ref:一种索引访问,返回所有匹配某个单独值的行,可能会找到多个符合条件的行,所以他应该属于查找和扫描的混合体(也是范围区间,不过比range更加精确)
    • fulltext:全文索引
    • ref_or_null:类似ref,只是搜索条件包括连接字段的值可以为NULL的情况,比如 where col = 2 or col is null
    • index_merge:多重范围扫描。两表连接的每个表的连接字段上均有索引存在且索引有序,结果合并在一起。适用于作集合的并、交操作
    • unique_subquery:在子查询中,基于唯一索引进行扫描,类似于eq_ref
    • index_subquery:在子查询中,基于除唯一索引之外的索引进行扫描
    • range:查询时,能根据索引做范围的扫描
    • index:比all性能稍好一点。all扫描所有的数据行,相当于data_all, index扫描所有的索引节点,相当于index_all
    • all:意味着从表的第1行,往后,逐行做全表扫描,运气不好扫描到最后一行
  3. possible_keys:显示可能应用在这张表中的索引。如果为空,没有可能的索引。
  4. key:实际使用的索引,如果为null,则没有使用索引。
  5. key_len:使用的索引的长度。在不损失精确性的情况下,长度越短越好
  6. ref:显示索引的哪一列被使用了,如果可能的话,是一个常数。
  7. rows:mysql认为必须检查的用来返回请求数据的行数,越小越好
  8. extra:利用有序索引获取有序数据显示Using index。而文件排序显示Using filesort,它是Mysql里一种速度比较慢的外部排序,能避免是最好的。using temporyary表示适用临时表排序,同样很耗时。
    • using index:出现这个说明Mysql使用了覆盖索引,避免了范围表的数据行,效率高。
    • using where:服务器在存储引擎收到返回的行之后进行过滤。但是有些where中的条件会有属于索引的列,当它执行时就会执行过滤,所以有些where语句并没有在extra列中出现using where。
    • using temporary:Mysql对查询结果进行排序的时候使用了一张临时表。
    • using filesort:Mysql会对数据使用一个外部索引进行排序,而不是按照表内的索引顺序进行读取

 

注意:MySQL在查询时最多只能使用一个索引。因此,如果WHERE条件已经占用了索引,那么在排序中就不使用索引了。

 

本文参考:http://www.cnblogs.com/xujishou/p/6389370.html

原文地址:https://www.cnblogs.com/wangwust/p/6379172.html