什么是“相关”子查询,为什么我们应该尽可能避免它们?

时间:2021-02-23 06:04:13

标签: sql database

我在网上查了一下,似乎我们应该避免使用它们,因为它们运行缓慢之类的?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

一些被误导的人认为它们总是不好的,可能是因为这些人不了解 SQL 优化器的工作原理。