问题3:mysql explain执行计划查看

来源:互联网 发布:c语言学习班 编辑:程序博客网 时间:2024/06/06 06:04

使用explain 对sql进行分析,若是select的话,直接使用,update,delete,insert则需要转化成select语句进行分析。下面是显示结果的各个列,会逐一进行解释:

一:Id分析:
包含一组数字,表示查询中执行select子句或操作表的顺序
id相同,执行顺序由上至下
如果是子查询,id的序号会递增,id值越大优先级越高,优先执行
id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行

二:select_type分析

三:table分析
输出记录关联的表,如上面例子的t1,t2,t3,

四:type分析
表关联的方式
System
只有一行记录满足要求,特殊的const关联方式
const
最多只有一行满足要求,where 一般是唯一索引或主键
eq_ref
从关联的表获取一行记录,除了const外,这是性能最好的关联方式,
它用在一个索引的所有部分被联接使用并且索引是UNIQUE或PRIMARY KEY。
Ref
所有记录都是从索引获取,索引通常不是唯一索引和主键索引

五:possible_keys分析
指出MySQL能使用哪个索引在表中找到行,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用

六:key分析
显示MySQL在查询中实际使用的索引,若没有使用索引,显示为NULL

七:key_len分析
表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度

八:ref分析
表示上述表的连接匹配条件
即哪些列或常量被用于查找索引列上的值

九:rows分析
表示返回的记录数,是优化器从统计信息表获取的。

十:Extra分析
using join buffer;使用了连接缓存
Block Nested Loop,连接算法是块嵌套循环连接
Batched Key Access,连接算法是批量索引连接
impossible where; where子句的值总是false,不能用来获取任何元组
select tables optimized away;基于索引优化MIN/MAX操作,查询执行计划生成的阶段即完成优化。

Sql性能分析是数据库核心内容,优化sql首先要读懂优化器如何工作的,这次数据库分享的内容比较长,关键掌握key的列,是否使用恰当的索引,还有row列返回多少条记录。

0 0
原创粉丝点击