哪一个更快:相关子查询还是加入?

时间:2012-09-11 19:17:22

标签: mysql sql

我知道我们可以correlated subqueries加入。但哪一个更快?是否有黄金法则或我必须同时衡量它们?

1 个答案:

答案 0 :(得分:19)

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

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

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