什么是"correlated"子查询,为什么我们应该尽可能避免它们?



我在网上查了一下,似乎我们应该避免它们,因为它们运行缓慢或其他什么?

关联子查询是连接到外部查询的子查询,通常通过where中的关联子句连接。一个通用的例子是:

select a.*,
(select count(*)
from b
where b.a_id = a.a_id
--------------^ correlation clause
) as b_count
from a;

为什么你应该避免它们?这就像在问"你什么时候停止殴打你的配偶了?"这是一个错误的问题。没有理由避免它们。

与所有SQL结构一样,有时相关子查询的性能很差。然而,令人惊讶的是,它们通常是实现所需逻辑的最快的方法。

一些被误导的人概括说它们总是不好的,可能是因为这些人不理解SQL优化器是如何工作的。

最新更新