目录
explain用于解析SQL语句的性能,分析出SQL中表的 读取顺序、 数据读取操作的操作类型、 有哪些索引可以使用、 哪些索引被实际使用以及 获取结果需要查询多少条记录
explain select …
id
里面的需要表示执行顺序,数值越大,执行优先级越高,数值相同则从上到下顺序执行
select_type
select_type表示查询的类型,主要用于区别普通查询、联合查询和子查询等复杂查询常见和常用的值有如下几种:
- SIMPLE
- PRIMARY
- SUBQUERY
- DERIVED
- UNION
- UNION RESULT
SIMPLE
简单的select查询,查询中不包含子查询或者UNION
PRIMARY
查询中包含任何复杂的子部分,最外层查询就会被标记为 PRIMARY
SUBQUERY
在SELECT或WHERE列表中包含了子查询
DERIVED
在FROM列表中包含子查询的将被标记为DERIVED
UNION
若第二个SELECT出现在UNION之后,则被标记为UNION;若UNION包含在FROM字句的子查询中,外层SELECT将被标记为:DERIVED
UNION RESULT
从UNION表获取结果的SELECT
table
指的就是当前执行的表
type
更加细粒度的查询类型,type的类型常用的几种类型性能从高到低分为:const > eq_ref > ref > range > index > all
const
表示通过索引一次就找到了,const 用于比较主键索引和唯一索引。因为只匹配一行数据,所以很快。
eq_ref
唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。
ref
非唯一性索引扫描,返回匹配某个单独值的所有行,本质上也是一种索引访问,可能会找到多条记录与之匹配
range
范围查询,一般就是在where语句后面出现 >、 <、 in、 between 等关键字的查询。
index
全索引扫描,与all全表扫描区别是,index 遍历索引数,all遍历数据,因为数据文件会比索引文件小,所以通常Index 会比 all 快。
all
全表扫描
possible_keys 和 key
分别代表可能使用到的索引和实际使用到的缩影。
key_len
索引中使用的字节数,可以通过该列计算查询中使用的索引长度。
ref
显示索引的哪一列被使用到
rows
大致估算出找到所需结果需要读取的行数,也就是说越少越好