explain关键词

Explain关键词返回字段描述

Explain关键字

可以查看mysql的执行过程

id select_type table type possible_keys key key_len ref rows extra
1 SIMPLE udid_info ALL 4900945

select_type字段值概述:(select类型)

1
2
3
4
5
6
7
8
SIMPLE  :   简单SELECT(不使用UNION或子查询)
PRIMARY : 最外面的select
UNION : UNION中的第二个或后面的SELECT语句
DEPENDENT UNION: UNION中的第二个或后面的SELECT语句,取决于外面的查询
UNION RESULT: UNION的结果
SUBQUERY: 子查询中的第一个select
DEPENDENT SUBQUERY: 子查询中的第一个select,取决于外面的查询
DERIVED : 导出表的select

table字段:

返回行所在的表名

type字段值概述:(链接类型,按照从最佳类型到最坏类型进行排序:)

1
2
3
4
5
6
7
8
9
10
11
system  : 仅有一行数据的表(系统表)
const : 表最多有一个匹配行,在查询开始前被读取
eq_ref :
ref :
index_merge : 该联接类型表示使用了索引合并优化方法
unique_subquery : 是一个索引查找函数,可以完全替换子查询,效率更高。
index_subquery : 同unique_subquery可以替换IN子查询,但只适合子查询中的非唯一索引
range : 范围查找
index : 该联接类型与ALL相同,除了只有索引树被扫描
ALL : 全表扫描

possible_keys:

possible_keys列指出MySQL能使用哪个索引在该表中找到行
#
key:

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

key_len列显示MySQL决定使用的键长度。如果键是NULL,则长度为NULL。注意通过key_len值我们可以确定MySQL将实际使用一个多部关键字的几个部分。
#
ref

ref列显示使用哪个列或常数与key一起从表中选择行。
#
rows

rows列显示MySQL认为它执行查询时必须检查的行数。
#
Extra

该列包含MySQL解决查询的详细信息

    Distinct
    Not exists
    range checked for each record
    Using filesort
    Using index
    Using temporary
    Using where
    Using sort_union(...), Using union(...), Using intersect(...)
    Using index for group-by