EXPLAIN mysql性能调优


解释:获得mysql如何执行查询的信息


id :SELECT识别符   

select_type:SELECT类型


SIMPLE	简单的 SELECT (没有使用 UNION 或子查询)
PRIMARY	最外层的 SELECT。
UNION	第二层,在SELECT 之后使用了 UNION 。
DEPENDENT UNION	UNION 语句中的第二个 SELECT,依赖于外部子查询
UNION RESULT	UNION的结果
SUBQUERY	子查询中的第一个SELECT
DEPENDENT SUBQUERY	子查询中的第一个SELECT,取决于外面的查询
DERIVED	导出表的SELECT(FROM子句的子查询)
table:记录查询引用的表


type:表连接类型。

以下列出了各种不同类型的表连接,依次是从最好的到最差的:

system(表只有一行记录(等于系统表)。这是 const 表连接类型的一个特例)
>const  const
const 用于在和 PRIMARY KEY 或 UNIQUE 索引中有固定值比较的情形。
下面的几个查询中,tbl_name 就是 const 表了:
SELECT * FROM tbl_name WHERE primary_key=1;
SELECT * FROM tbl_name WHERE primary_key_part1=1 AND primary_key_part2=2;
>eq_ref 
它用在索引所有部分都用于做连接并且这个索引是一个 PRIMARY KEY 或 UNIQUE 类型
>ref
ref 用于连接程序使用键的最左前缀或者是该键不是 PRIMARY KEY 或 UNIQUE 索引,这也是个不错的连接类型
(程序无法根据键值取得唯一记录)
>ref_or_null
这种连接类型类似 ref,不同的是MySQL会在检索的时候额外的搜索包含 NULL 值的记录
> index_merge

 > unique_subquery> index_subquery > range
range 用于将某个字段和一个定植用以下任何操作符比较时 =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, 或 IN
 > index
连接类型跟 ALL 一样,不同的是它只扫描索引树 ,通常索引树比表数据小  > all


  possible_keys : 

key    key_len  

 ref ef 字段显示了哪些字段或者常量被用来和 key 配合从表中查询记录出来

   rows

Extra:

Distinct
MySQL当找到当前记录的匹配联合结果的第一条记录之后,就不再搜索其他记录了。
Not exists
MySQL在查询时做一个 LEFT JOIN 优化时,当它在当前表中找到了和前一条记录符合 LEFT JOIN 条件后,
就不再搜索更多的记录了。下面是一个这种类型的查询例子:
SELECT * FROM t1 LEFT JOIN t2 ON t1.id=t2.id
WHERE t2.id IS NULL;
Using filesort
MySQL需要额外的做一遍从而以排好的顺序取得记录。排序程序根据连接的类型遍历所有的记录,并且将所有符合 
WHERE 条件的记录的要排序的键和指向记录的指针存储起来。这些键已经排完序了,对应的记录也会按照排好的顺序取出来。
Using index
字段的信息直接从索引树中的信息取得,而不再去扫描实际的记录。这种策略用于查询时的字段是一个独立索引的一部分
Using temporary
MySQL需要创建临时表存储结果以完成查询。这种情况通常发生在查询时包含了GROUP BY 和 ORDER BY 子句,
它以不同的方式列出了各个字段

如果你想要让查询尽可能的快,那么就该注意 Extra 字段的值为Using filesort 和 Using temporary 的情况。


你可能感兴趣的:(mysql,EXPLAIN)