explain 使用说明
参考文献
返回行字段说明
字段 | 含义 | 说明 |
---|---|---|
id | 查询中的序号 | 数字越大代表优先级越高先执行,数字相同在前面的先执行 |
select_type | 查询的类型 | 可以包含很多值,代表不同的查询,可以查看参考文献 |
table | 输出行所引用的表的名称 | 也可能是<union*M ,N > 并集查询;<derivedN >派生表查询;<subqueryN *>子表查询 |
partitions | 数据记录的分区 | (null) 表示非分区表 |
type | *联接类型(查找数据的大概范围) | 最优到最差依次是system>const>eq_ref>ref>range>index>ALL;得保证查询达到range级别,最好是ref |
possible_keys | 可能使用的索引列 | 此列是NULL 表示没有相关索引,可以在where条件中加一个索引进行优化 |
key | 实际使用的索引 | |
key_len | 实际使用的索引长度 | 可以大概算出来使用索引的多少部分,有一个计算原则(依据索引的类型) |
ref | 索引关联 的字段 | 条件可能是一个常量或者关联的字段列 |
rows | 查询结果可能的行数 | 预估值,并不代表结果就是这么多行 |
filtered | 按表条件过滤的表行的估计百分比 | 最大值100,表示没有过滤 |
Extra | 其他的额外信息 |
type的具体含义解释
system:表里只有一条记录
const:相当于常量查询
eq_ref:主键索引、唯一索引查询
ref:二级索引(普通索引)
range:范围查询> in between and 等等
index:查全索引数据,一般不带where条件的情况
ALL:全表扫描,扫描聚簇索引所有叶子节点的全量数据。
key_len计算规则
-
字符串
char(n) n字节长度
varchar(n) 如果编码是utf-8,则长度3n+2字节,加的2个字节用来存储字符串长度
-
数值类型
tinyint:1字节
smallint:2字节
int:4字节
bigint:8字节
-
时间类型
date:3字节
timestamp:4字节
datetime:8字节
索引的最大长度是768字节,当字符串过长时,mysql会做一个类似左前缀索引的处理。