table列的结果表明当前行对应的select正在访问哪个表。当查询的<from>子句中有子查询时,table列是 <derivedN> 格式,表示当前的select依赖 id=N结果行对应的查询,要先执行 id序号=N 的查询。当存在 union 时,UNION RESULT 的 table 列的值为<unionN1,N2>,N1和N2表示参与 union 的select 行的id序号。 【type...
DERIVED: 在from列表中包含的子查询被标记为derived(衍生),把结果放在临时表。 UNION: 若第二个select出现的union之后,则被标记为union ,若union包含在from子句的子查询中,外层select将被标记为deriver UNION RESULT: 从union表获取结果select,两个UNION合并的结果集在最后。 table: 操作涉及的表。 type: 访问类型,...
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; +---+---+---+---+--...
包含在SELECT列表中的子查询中的SELECT(换句话说,不在FROM子句中)标记为SUBQUERY。 DERIVED DERIVED值用来表示包含在FROM子句的子查询中的SELECT, MySQL会递归执行并将结果放到一个临时表中。服务器内部称 其“派生表”,因为该临时表是从子查询中派生来的。 UNION 在UNION中的第二个和随后的SELECT被标记为UNION。第...
4(id = 1)、【select , … d2 from … d1】:select_type为PRIMARY表示该查询为最外层查询,table列被标记为 “derived3”表示查询结果来自于一个衍生表(id = 3 的select结果)。 5(id = NULL)、【… union …】:代表从union的临时表中读取行的阶段,table列的 “union 1, 4”表示用id=1 和 id=4...
其实仔细观察上面这个SQL,derived table中union all连接的前三个SQL检索条件基本是一致的,而union all连接的后两个SQL检索条件基本是一致的,只是SELECT中concat内容不同,因此能做改写。 以前三个SQL为例,concat通过case when判断不同的id和title条件下,应该输出的内容,where条件中带上之前所有的字段,改造完这就是独...
1.5 table 这个没啥好讲的,表示这个查询是基于哪种表的。并不一定是真实存在的表,比如上面出现的DERIVED和<union1,2>,一般来说会出现下面的取值: (1)<union a,b>:输出结果中编号为 a 的行与编号为 b 的行的结果集的并集。 (2)< derived a>:输出结果中编号为 a 的行的结果集,derived 表示这是一个...
执行计划中的第一行<derived2>这张"表"是全表扫描, 原因就是上述SQL,实际可以理解为,对derived table的检索,实际上是没有任何检索条件的, select*from( ... ) tt orderbyclass,end_datedesc; 其实仔细观察上面这个SQL,derived table中union all连接的前三个SQL检索...
explain select a.* from t1 a left join t2 b on t1.name = t2.name where t2.name = 2; 结果: Recursive出现了递归查询。详见 “WITH (Common Table Expressions)” Rematerialize用得很少,使用类似如下SQL时,会展示Rematerialize SELECT ... FROM t, LATERAL (derived table that refers to t) AS ...
explain关键字可以模拟优化器执行SQL语句,从而知道MySQL是 如何处理你的SQL语句的。分析你的查询语句或是结构的性能瓶颈。在select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询时,会返回执行计划的信息,而不是执行这条SQL(如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中) ...