explain select 查询结果参数的意义

Extra:

   1.use index

   从只使用索引树中的信息而不需要进一步搜索读取实际的行来检索表中的列信息。当查询只使用作为单一索引一部分的列时, 可以使用该策略。

 

rows:

   rows 列显示MySQL 认为它执行查询时必须检查的行数。就是实际会去硬盘查找的行数,与在索引中查找有区别。

 

select_type:

   1. SIMPLE

   简单SELECT ( 不使用UNION 或子查询)

   2. PRIMARY

   最外面的SELECT,最上层select,子查询外面得

   3.UNION

   UNION 中的第二个或后面的SELECT 语句

   4.DEPENDENT UNION

   UNION 中的第二个或后面的SELECT 语句,取决于外面的查询

o        UNION RESULT

UNION 的结果。

o        SUBQUERY

子查询中的第一个SELECT

o        DEPENDENT SUBQUERY

子查询中的第一个SELECT ,取决于外面的查询

o        DERIVED

导出表的SELECT ( FROM 子句的子查询)

 

table:

   输出的行所引用的表。

type:

    联接类型。下面给出各种联接类型,按照从最佳类型到最坏类型进行排序

    1.  system

    表仅有一行(= 系统表) 。这是const 联接类型的一个特例。

    2. const

   表最多有一个匹配行,它将在查询开始时被读取。因为仅有一行,在这行的列值可被优化器剩余部分认为是常数。const 表很快,因为它们只读取一次!

const 用于用常数值比较PRIMARY KEYUNIQUE 索引的所有部分时。在下面的查询中,tbl_name 可以用于const 表:

    3.ref

    对于每个来自于前面的表的行组合,所有有匹配索引值 的行将从这张表中读取。如果联接只使用键的最左边的前缀,或如果键不是UNIQUEPRIMARY KEY (换句话说,如果联接不能基于关键字选择单个行的话),则使用ref 。如果使用的键仅仅匹配少量行,该联接类型是不错的。

ref 可以用于使用=<=> 操作符的带索引的列。

    3.ALL

    对于每个来自于先前的表的行组合,进行完整的表扫描。如果表是第一个没标记const 的表,这通常不好,并且通常在它情况下很 差。通常可以增加更多的索引而不要使用ALL ,使得行能基于前面的表中的常数值或列值被检索出。

   联接采用扫描所有行的形式。

possible_keys:

   possible_keys 列指出 mysql能使用哪个索引 在该表中找到行。注意,该列完全独立于EXPLAIN 输出所示的表的次序。这意味着在possible_keys 中的某些键实际上不能按生成的表次序使用。

如果该列是NULL ,则没有相关的索引。在这种情况下,可以通过检查WHERE 子句看是否它引用某些列或适合索引的列来提高你的查询性能。如果是这样,创造一个适当的索引并且再次用EXPLAIN 检查查询。

key:

   key 列显示mysql 实际决定使用的键 (索引)。如果没有选择索引,键是NULL 。要想强制MySQL 使用或忽视possible_keys 列中的索引,在查询中使用FORCE INDEXUSE INDEX 或者IGNORE INDEX

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(MySQL)