分析mysql执行计划
前言 : 一直以为都不太明白explain执行计划有什么用处,今天特意抽出来一个时间,着重了解一下执行计划里面的字段都是一些什么意思;(看其他博主都是一大篇的前言,今天有时间自己也来说几句,哈哈哈哈哈哈)
第一个查询是全表扫描,第二个是索引扫描
**id : **
select_type : 是否是复杂语句
tbale : 表名 或者 表别名
**partitions : **
type : all是全表扫描 index 通过索引扫描
possible_keys : 可能可以利用的索引的名字。这里的索引名字是创建索引时指定的索引昵称;如果索引没有昵称,则默认显示的是索引中第一个列的名字。默认索引名字的含义往往不是很明显
key : 它显示了MySQL实际使用的索引的名字。如果它为空(或NULL),则MySQL不使用索引
key_len : 索引中被使用部分的长度,以字节计。
ref : 它显示的是列的名字(或单词“const”),MySQL将根据这些列来选择行。在本例中,MySQL根据三个常量选择行。
rows : MySQL所认为的它在找到正确的结果之前必须扫描的记录数。显然,这里最理想的数字就是1
**filtered : **
Extra : 这里可能出现许多不同的选项,其中大多数将对查询产生负面影响。在本例中,MySQL只是提醒我们它将用WHERE子句限制搜索结果集
字段名 | 字段意思 | 字段值 |
---|---|---|
id | 表格查询的顺序编号 | 降序查看,id相同的从上到下查查看。id可以为null ,当table为( union ,m,n )类型的时候,id为null,这个时候,id的顺序为 m跟n的后面。 |
select_type | 查询的方式 | |
table | 表格名称 | 表名,别名,( union m,n )。 |
partitions | 分区名称 | 查询使用到表分区的分区名。 |
type | 表连接的类型 | 1. SIMPLE : 简单查询方式们不是呀UNION跟子查询; 2.PRIMARY : 该表格位于最外层开始查询,通常会跟其他查询方式组合; 3.UNION : UNION第一个SELECT 为PRIMARY,第二个以及之后的所有SELECT 为UNION SELECT TYPE ; 4.UNION RESULT : 每个结果集取出来后,会做合并操作,这个操作就是UNION RESULT; |
possible_keys | 可能使用到的索引 | 这里的索引只是可能会有到,实际不一定会用到。 |
key | 使用到的索引 | 实际使用的索引。 |
key_len | 使用到索引的长度 | 比如多列索引,只用到最左的一列,那么使用到索引的长度则为该列的长度,故该值不一定等于 key 列索引的长度。 |
ref | 谓词的关联信息 | 当 join type 为 const、eq_ref 或者 ref 时,谓词的关联信息。 |
可能为 :null(非 const \ eq_ref \ ref join type 时)、const(常量)、关联的谓词列名。 | ||
rows | 扫描的行数 | 该表格扫描到的行数。这里注意在mysql里边是嵌套链接,所以,需要把所有rows相乘就会得到查询数据行关联的次数 |
filtered | 实际显示行数占扫描rows的比例 | 实际显示的行数 = rows * filtered / 100 |
extra | 特性使用 |