15

我知道我们可以做相关的子查询并加入。但是哪个更快?有黄金法则还是我必须同时衡量两者?

4

1 回答 1

28

首先,相关子查询实际上是一种联接。没有关于哪个产生最佳执行计划的黄金法则。如果您对性能感兴趣,则需要尝试不同的形式,看看哪种形式最有效。或者,至少,查看执行计划以做出该决定。

一般来说,出于几个原因,我倾向于避免相关子查询。首先,它们几乎总是可以在没有相关性的情况下编写。其次,许多查询引擎将它们变成嵌套循环连接(尽管使用索引),其他连接策略可能会更好。在这种情况下,相关子查询使查询的并行化变得困难。第三,相关子查询通常出现在 SELECT 或 WHERE 子句中。我喜欢我所有的表都在 FROM 子句中。

然而,在 MySQL 中,相关子查询通常是进行查询的有效方式。在子句中使用子查询时尤其如此IN。所以,没有黄金法则。

于 2012-09-11T19:23:07.537 回答