我知道我们可以做相关的子查询并加入。但是哪个更快?有黄金法则还是我必须同时衡量两者?
问问题
8912 次
1 回答
28
首先,相关子查询实际上是一种联接。没有关于哪个产生最佳执行计划的黄金法则。如果您对性能感兴趣,则需要尝试不同的形式,看看哪种形式最有效。或者,至少,查看执行计划以做出该决定。
一般来说,出于几个原因,我倾向于避免相关子查询。首先,它们几乎总是可以在没有相关性的情况下编写。其次,许多查询引擎将它们变成嵌套循环连接(尽管使用索引),其他连接策略可能会更好。在这种情况下,相关子查询使查询的并行化变得困难。第三,相关子查询通常出现在 SELECT 或 WHERE 子句中。我喜欢我所有的表都在 FROM 子句中。
然而,在 MySQL 中,相关子查询通常是进行查询的最有效方式。在子句中使用子查询时尤其如此IN
。所以,没有黄金法则。
于 2012-09-11T19:23:07.537 回答