mysql-explain

explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。

使用方法,在select语句前加上explain就可以了:
如:explain select surname,first_name form a,b where a.id=b.id
下面解释下explain执行计划包含信息:

  • id:select查询的一个序列号,包含一组数字,表示查询中执行select子句或操作表的顺序。分别有三种情况,id相同,执行顺序由上至下。id不同,如果是子查询,id的序号会递增,id值越大,优先级越高,越先被执行。id相同不同,同时存在。
  • select_type:常见及常用的值有6个,分别是:SIMPLEPRIMARYSUBQUERYDERIVEDUNIONUNION RESULT,查询的类别主要是用于区分普通查询、联合查询、子查询等复杂查询。
select_type 解释
SIMPLE 简单的select查询
PRIMARY 查询中若包含任何复杂的子查询,最外层查询
SUBQUERY 在查询或条件中(where条件)中包含了子查询
DERIVED 在FROM中包含的子查询被标记为DERIVED(衍生)
UNION 第二个select出现在UNION之后,则被标记为UNION,若UNION包含在FROM子句的查询中,外层SELECT将被标记为:DERIVED
UNION RESULT 从UNION表获取结果
  • table:表名
  • type:访问类型,包含8种值,分别为ALL、index、range、ref、eq_ref、const、system、null,常用的访问类型主要的顺序是system>eq_ref>ref>range>index>ALL。
  • possible_keys:表示执行语句中可能用到的索引。
  • key:表示实际用到的索引。
  • key_len:表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度。
  • ref: 显示索引的哪一列全用了,如果可能的话,是一个常数(const)。
  • rows:根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取的行数。
  • Extra:包含不适合在其他列中显示但十分重要的额外信息。如下:
    using index:出现这个说明mysql使用了覆盖索引,避免访问了表的数据行,效率不错!
    using where:这说明服务器在存储引擎收到行后将进行过滤。有些where中的条件会有属于 索引的列,当它读取使用索引的时候,就会被过滤,所以会出现有些where语句并没有在extra列中出现。
    using where这么一个说明。
    using temporary:这意味着mysql对查询结果进行排序的时候使用了一张临时表。
    using filesort:这个说明mysql会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取。

你可能感兴趣的:(mysql)