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

问题描述 投票:0回答:2

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

sql database
2个回答
2
投票

相关子查询是连接到外部查询的子查询,通常通过

where
中的相关子句。 一个通用的例子是:

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

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

与所有 SQL 结构一样,有时相关子查询的性能很差。 但令人惊讶的是,它们往往是实现所需逻辑的“最快”方式。 一些被误导的人普遍认为它们总是不好的,可能是因为这些人不了解 SQL 优化器是如何工作的。


0
投票

选择标题,[类型],价格,

(从 dbo.titles 选择 avg(price) 作为 InnerQuery,其中 InnerQuery.[type] = OuterQuery.[type])作为 AVGPrice

来自 dbo.titles 作为 OuterQuery

因此您将获得每种书籍类型的平均价格

© www.soinside.com 2019 - 2024. All rights reserved.