一、explain使用方式
explain select * from article where name = 'today';
二、建表语句
CREATE TABLE `article` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(100) DEFAULT NULL COMMENT '名称',
`summary` varchar(200) DEFAULT NULL COMMENT '概要',
`content` varchar(500) DEFAULT NULL COMMENT '内容',
`create_user` varchar(50) DEFAULT NULL COMMENT '创建用户',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='文章表'
三、内容
insert into
article(name,summary,content,create_user)
values
("today","weather","good","csdn10"),
("yesterday","weather","bad","csdn10"),
("today","temperature","20","csdn10"),
("yesterday","temperature","30","csdn10")
四、查询结果
五、分析
id:该条查询语句的标识符,是查询时候的序列号。如果是合其他行的union结果,值有可能是Null,。在这种情况下,表的字段展示了一个像<unionM,N>,也即是两个数据的并集
select_type:查询类型
table:表名,输出行所引用的表的名称,也有可能是以下值(其他文章会进行详细介绍)之一
<unionM,N>:M和N的id结果并集
<derivedN>:表示N的id派生结果,可能来自from的子句中的子查询
<subqueryN>:子查询结果id的N
partitions:匹配记录的分区。NULL用于非分区表
type:连接类型。一个好的SQL语句至少要达到range级别。杜绝出现all级别。
possible_keys:可供选择的可能索引,存在这些索引,但查询的时候有些可能不会使用
key:使用到的实际索引名。如果没有选择索引,值是NULL。如果key是NULL,那么Mysql找不到可用于更有效地执行查询地索引,可以采取强制索引方式。
key_len:索引长度。
ref: 显示从表中查询的时候与key中的索引进行比较,和索引匹配的列或者常量
rows:扫描估计的行数。该值是个预估值。
filtered:按条件过滤的百分比。最大100,意味着没有进行过滤。rows*filtered=实际关联的表下面的数据
extra:详细说明。包含有关Mysql如何解析查询的附加信息