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
每一步执行怎样的查询;
六、Table
显示这一行的数据是关于哪张表的;
七、partitions
数据来源;
八、Type
最重要的列,显示连接使用了何种类型。从最好到最坏的连接类型为system、const、 eq_reg、ref、range、index和all;
九、Possible_keys
查询条件字段涉及到的索引,可能没有使用;
十、Key
实际使用的索引。如果为null,则没有使用索引;
十一、Key_len
表示索引中使用的字节数,查询中使用的索引的长度(最大可能长度),并非实际 使用长度,理论上长度越短越好。Key_len是根据表定义计算而得出的,不是通过 表内检索出的;
十二、Ref
显示索引的哪一列被使用了,如果可能的话,是一个常量const;
十三、Rows
根据表统计信息及索引选用情况,大致估算出找所需的记录所需要读取的行数;
十四、Fitered
显示了通过条件过滤出的行数的百分比估计值;
十五、Extra
MySQL如何解析查询的额外信息;