explain解析

1 .id
select的查询顺序,如果ID相同则按从上到下。
2.select type
区分查询是简单还是复杂查询
1)simple:简单音询。查询不包含子音询和union
explain select *from film where id = 2:
2)primary:复杂查询中最外层的 select
3)subquery:包含在 select 中的子查询(不在 from 子句中)
4)derived:包含在 from 子句中的子査询。MySQL会将结果存放在一个临时表中,也称为派生表(derived的英文含义)
5)union:在 union 中的第二个和随后的 select
3.table
查询的是哪张表
4.partitions列
基于分区表查询,这个列显示访问的分区
5.type列表
system->const->eq_ref->ref->range->index-all
一般都要range,最好是ref
NULL:执行的时候,不需要通过索引完成查询
const:常数连接,如查询主键或者唯一索引。则查询的rows只有一条不需要全表扫描,效率非常快
system:表数据极少数,不需要IO操作。很少见这种类型查询
eq_ref:主键和唯一索引被连接ON 条件使用,使得查询最多返回一条数据。
ref:使用普通索引或者唯一索引的查询方式,相比全表效率更高
range:使用索引 in < > between 范围查询的行。
index:覆盖索引查询,当SQL通过索引查询获得所需列信息。无需到表中查询。而且查询的时候从二级索引的叶子节点扫描。存在二级索引比较小的情况。
6.possible_keys列
可能使用的查询索引列
7.key列
Mysql使用什么索引列对表的访问。
8.key_len列
索引使用的字节数,通过这个数可以进一步知晓Mysql使用的那些列
字符串,char(n)和varchar(n),5.0.3以后版本中,n均代表字符数,而不是字节数,如果是utf-8,一个数字或字母占1个字节,一个汉字
占3个字节
char(n):如果存汉字长度就是 3n 字节
varchar(n):如果存汉字则长度是 3n + 2 字节,加的2字节用来存储字符串长度,因为varchar是变长字符串
数值类型
tinyint:1字节
smallint:2字节
int:4字节
bigint:8字节  
时间类型 
date:3字节
timestamp:4字节
datetime:8字节
如果字段允许为 NULL,需要1字节记录是否为 NULL
索引最大长度是768字节,当字符串过长时,mysql会做一个类似左前缀索引的处理,将前半部分的字符提取出来做索
引。
假设有一个 VARCHAR(255) 字段,使用 utf8 字符集,允许为 NULL,则 key_len = (3 * 255) + 1(NULL 标志)+ 2(长度信息)= 765 + 1 + 2 = 768 字节。
对于一个 INT(通常为 4 字节)和一个 VARCHAR(100)(假设使用 utf8,允许 NULL),则 key_len = 4(INT长度)+ (3 * 100) + 1(NULL标志)+ 2(长度信息)= 4 + 300 + 1 + 2 = 307 字节。
9.rows
扫描的行数
10.filtered
这个值表示MySQL优化器预测的通过某个表访问方法返回的行数占表中总行数的比例
11.extra列
扩展信息
Using inxex:覆盖索引,不需要回表查询、
Using where:通过wehre查询
Using index condition:基于索引能够排除一定的范围数据
Using temporary:创建临时表处理查询,遇到这种要优化
Using filesort:如果order by不能通过索引实现,则需要文件排序。

https://www.cnblogs.com/guangxiang/p/15647090.html

posted @ 2024-07-01 23:51  辉辉、  阅读(1)  评论(0编辑  收藏  举报