我知道我们可以进行相关的子查询并加入。但是哪一个更快?有黄金法则还是我必须同时衡量这两者?
首先,相关子查询实际上是联接的一种。关于哪一个产生最佳执行计划没有黄金法则。如果您对性能感兴趣,则需要尝试不同的表格以查看最有效的方法。或者,至少,看看执行该决定的执行计划。
通常,出于两个原因,我倾向于避免关联子查询。首先,几乎总是可以在没有相关性的情况下编写它们。其次,许多查询引擎将它们转换为嵌套循环联接(尽管使用索引),而其他联接策略可能更好。在这种情况下,相关子查询使并行查询变得困难。第三,关联的子查询通常在SELECT或WHERE子句中使用。我希望所有表都位于FROM子句中。
但是,在MySQL中,关联子查询通常是执行查询的 最 有效方法。在IN子句中使用子查询时尤其如此。因此,没有黄金法则。
IN