加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > 正文

很清晰的Explain总结,妈妈再也不担心我的SQL优化了

发布时间:2021-06-09 05:46:44 所属栏目:创业 来源:互联网
导读:在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询时,会返回执行计划的信息,而不是执行这条SQL(如果 from 中包含子查询,仍会

在 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 =  

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

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读