一、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如何解析查询的附加信息
|