Explain执行计划
例:Explain select * from user;
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
id:查询序列号,表示查询中执行select子句或操作表的顺序
1),id相同,执行顺序由上至下
2),id不同,如果是子查询,id的序号会递增,id值越大,优先级越高,越早被执行
3),id同时存在相同和不同,可以认为相同的为一组,在组内执行顺序由上至下,在所有组中,按id的大小执行,id越大越快被执行
select_type:查询类型
1),SIMPLE:简单的select查询,查询中不包括子查询或UNION。
2),PRIMARY:子查询中的最外层查询,查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY。
3),UNION:若第二个select出现在union之后,则被标记为union;
4),DEPENDENT UNION:UNION中的第二个或后面的SELECT语句,取决于外面的查询
5),UNION RESULT:从UNION表获取结果的SELECT
6),SUBQUERY:在select 或 where列表中包含了子查询
7),DEPENDENT SUBQUERY:子查询中的第一个SELECT,依赖于外部查询
8),DERIVED:若union包含在from子句的子查询中,外层select将被标记为derived
9),UNCACHEABLE SUBQUERY:一个子查询的结果不能被缓存,必须重新评估外链接的第一行
type:当前被执行的表或者结果集
1),ALL:扫描遍历全数据表
2),INDEX:全索引表扫描
3),RANGE:对索引列进行范围查找
4),INDEX_MERGE:合并索引,使用多个单列索引搜索
5),REF:根据索引查找一个或多个值
6),EQ_REF:搜索时使用primary key 或 unique类型
7),CONST:常量,表最多有一个匹配行,因为仅有一行,在这行的列值可被优化器剩余部分认为是常数,const表很快,因为它们只读取一次。
8),SYSTEM:系统,表仅有一行(=系统表)。这是const联接类型的一个特例。
9),NULL
性能:ALL<INDEX<RANGE<INDEX_MERGE<ref_or_null<REF<EQ_REF<CONST/SYSTEM<NULL
性能在RANGE之下基本都可以进行调优
partitions:可能使用的索引
table:真实使用的
possible_keys:指出MySQL能使用哪个索引在表中找到行,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用。
key:MySQL中实际使用的索引
key_len:MySQL中实际使用的索引字节长度
ref:显示索引的那一列被使用了
rows:MySql 预估为了找到所需的行而要读取的行数
filtered:
Extra:包含不适合在其他列中显示但十分重要的额外信息