MySQL中的执行计划

MySQL中的执行计划

在MySQL中可以通过explain关键字模拟优化器执行SQL语句,从而知道MySQL是如何处理SQL语句的;


一、Mysql整个查询执行过程


客户端向MySQL服务器发送一条查询条件;

服务器首先检查查询缓冲,如果命中缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段;

服务器进行SQL解析、预处理、再由优化器生成对应的执行计划;

MySQL根据执行计划,调用存储引擎的API来执行查询;

讲结果返回给客户端,同时缓存查询结果;


二、如何启动执行计划


Explain select 投影列 from 表名 where 条件


三、Explain列分类


ID

select_type

Table

Type

Possible_keys

Key

Key_len

Ref

Rows

Fitered

Extra


四、ID


查询执行顺序;

Id值相同时表示从上向下执行;

Id值相同被视为一组;

如果是子查询,id值会递增,id值越高,优先级越高;


五、Select_type


每一步执行怎样的查询;
MySQL中的执行计划


六、Table


显示这一行的数据是关于哪张表的;


七、partitions


数据来源;


八、Type


最重要的列,显示连接使用了何种类型。从最好到最坏的连接类型为system、const、 eq_reg、ref、range、index和all;
MySQL中的执行计划


九、Possible_keys


查询条件字段涉及到的索引,可能没有使用;


十、Key


实际使用的索引。如果为null,则没有使用索引;


十一、Key_len


表示索引中使用的字节数,查询中使用的索引的长度(最大可能长度),并非实际 使用长度,理论上长度越短越好。Key_len是根据表定义计算而得出的,不是通过 表内检索出的;


十二、Ref


显示索引的哪一列被使用了,如果可能的话,是一个常量const;


十三、Rows


根据表统计信息及索引选用情况,大致估算出找所需的记录所需要读取的行数;


十四、Fitered


显示了通过条件过滤出的行数的百分比估计值;


十五、Extra


MySQL如何解析查询的额外信息;

MySQL中的执行计划