解释命令的 select_type 列中的 DEPENDENT UNION 是啥?

Posted

技术标签:

【中文标题】解释命令的 select_type 列中的 DEPENDENT UNION 是啥?【英文标题】:What is DEPENDENT UNION in select_type column from explain command?解释命令的 select_type 列中的 DEPENDENT UNION 是什么? 【发布时间】:2013-10-04 20:59:04 【问题描述】:

来自 mysql ref manual:“UNION 中的第二个或以后的 SELECT 语句,取决于外部查询”。 但是 UNION 查询如何依赖于外部查询呢?有人可以给我一个明确的例子,这是什么意思?例如,在这个查询中:

SELECT * FROM sometable 
WHERE id IN (
    SELECT 1
    UNION
    SELECT 2 /* ! */
)

union 中的第二个 select 语句(它本身是子查询)有 DEPENDENT UNION select_type,我不知道为什么,它必须只是 UNION,因为它不依赖任何东西。

【问题讨论】:

【参考方案1】:

好吧,这种情况下的问题是IN 运算符,因为IN 子句中的子查询被重写为相关子查询。

如果是联合,相关子查询将为您提供“依赖子查询”或“依赖联合”。

见doc

问题在于,对于使用 IN 子查询的语句, 优化器将其重写为相关子查询。考虑以下 使用不相关子查询的语句:

SELECT ... FROM t1 WHERE t1.a IN (SELECT b FROM t2);优化器 将语句重写为相关子查询:

SELECT ... FROM t1 WHERE EXISTS (SELECT 1 FROM t2 WHERE t2.b = t1.a);

【讨论】:

但是在SELECT 1 UNION SELECT 2查询第二个语句有UNION类型,而不是DEPENDENT UNION,为什么? @kirugan 抱歉累了,我想我终于明白了。 Didnt know about IN` 的行为,似乎是真的。谢谢! @Raphaël Althaus 请看我的帖子,我不明白为什么我与联合的查询需要永远但没有联合却非常快,从你在两个查询中写的内容来看,它应该充当关联子查询,耗时较长dba.stackexchange.com/questions/133972/…

以上是关于解释命令的 select_type 列中的 DEPENDENT UNION 是啥?的主要内容,如果未能解决你的问题,请参考以下文章

强制熊猫将列中的 (1,2) 解释为字符串而不是范围?

强制pandas将列中的(1,2)解释为字符串而不是范围?

软件安全实验——pre7(JIT sprayheap spraySEH绕过DEP漏洞预习)

MySQL explain

使用 htop 命令时,time+ 列中的红色值是不是表示有问题?

MySQL explain字段解释