一郎科技|最完整的Explain总结,妈妈再也不担心我的SQL优化了
在 select 语句之前增加 explain 关键字 , MySQL 会在查询上设置一个标记 , 执行查询时 , 会返回执行计划的信息 , 而不是执行这条SQL(如果 from 中包含子查询 , 仍会执行该子查询 , 将结果放入临时表中)
CREATE TABLE `film` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(10) DEFAULT NULL,PRIMARY KEY (`id`),KEY `idx_name` (`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE `actor` (`id` int(11) NOT NULL,`name` varchar(45) DEFAULT NULL,`update_time` datetime DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE `film_actor` (`id` int(11) NOT NULL,`film_id` int(11) NOT NULL,`actor_id` int(11) NOT NULL,`remark` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`),KEY `idx_film_actor_id` (`film_id`,`actor_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8两个变种explain extended
会在 explain 的基础上额外提供一些查询优化的信息 。 紧随其后通过 show warnings 命令可以 得到优化后的查询语句 , 从而看出优化器优化了什么 。 额外还有 filtered 列 , 是一个半分比的值 , rows * filtered/100 可以估算出将要和 explain 中前一个表进行连接的行数(前一个表指 explain 中的id值比当前表id值小的表)
mysql> explain extended select * from film where id = mysql> show warnings;explain partitions
相比 explain 多了个 partitions 字段 , 如果查询是基于分区表的话 , 会显示查询将访问的分区 。
id列id列的编号是 select 的序列号 , 有几个 select 就有几个id , 并且id的顺序是按 select 出现的顺序增长的 。MySQL将 select 查询分为简单查询(SIMPLE)和复杂查询(PRIMARY) 。复杂查询分为三类:简单子查询、派生表(from语句中的子查询)、union 查询 。id列越大执行优先级越高 , id相同则从上往下执行 , id为NULL最后执行**
select_type列select_type 表示对应行是简单还是复杂的查询 , 如果是复杂的查询 , 又是上述三种复杂查询中的哪一种 。1.simple简单查询 。 查询不包含子查询和union
mysql> explain select * from film where id = 2;2)primary:复杂查询中最外层的 select
3)subquery:包含在 select 中的子查询(不在 from 子句中)
4)derived:包含在 from 子句中的子查询 。 MySQL会将结果存放在一个临时表中 , 也称为派生表(derived的英文含义) 用这个例子来了解 primary、subquery 和 derived 类型
mysql> explain select (select 1 from actor where id = 1) from (select * from film where id = 1) der;5)union:在 union 中的第二个和随后的 select
6)union result:从 union 临时表检索结果的 select 用这个例子来了解 union 和 union result 类型:
mysql> explain select 1 union all select 1;
推荐阅读
- 所持股份|万兴科技:公司控股股东、实际控制人吴太兵质押150万股
- 发布公告|数量过半!博创科技:天通股份累计减持约150万股
- 英雄科技聊数码|蔡崇信有实力买下篮网,那身价3200亿的马云,能买下几支NBA球队
- 科技前沿阵地|涨疯了!海思安防芯片遭哄抬“围剿”
- 月影浓|吴亦凡机械造型走秀 垫肩披风搭银框眼镜科技感足
- 中国历史发展过程|中国历史发展过程.中国的科技史界过去半个多世纪
- 天津|桂发祥:不再持有昆汀科技股份
- 消费|减持!天通股份:减持博创科技约32万股
- 处罚|老周侃股:吉鑫科技大股东应补偿踩雷投资者
- 华中科技大学|杯具!超本科线95分,本科有路不走,却梦幻般碰瓷,撞开专科的门
