很清晰的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 = 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 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |