【发布时间】:2020-01-28 11:43:00
【问题描述】:
我最近浏览了很多 SQL 代码,其中 Join 部分填充了复杂的子查询,并开始想知道加入带有有限列选择的子查询与加入整个表并只选择必要的列是否有任何好处。
为了说明这一点:
假设我们有 2 个表:Table1, Table2,每个表都有 (PK, FK, a, b ,c, d, e, f) 列。
我想将 Table1 与 Table2 连接起来,但只从 Table2 中检索几个字段。
哪个更高效,每个有什么好处?
SELECT
Table1.*,
Table2.a,
Table2.b
FROM Table1
LEFT JOIN Table2 ON Table1.PK = Table2.FK
或
SELECT
Table1.*,
Table2sub.*
FROM Table1
LEFT JOIN (SELECT FK, a, b FROM Table2) AS Table2sub ON Table1.PK = Table2sub.FK
【问题讨论】:
-
“哪个更有效” 测试这些语句会很快给你答案。你发现了什么?
-
如果您接受 Gordon 关于性能的回答,那么需要注意的是,第一个 更易于阅读
-
@GeorgeMenoutis 就是这样 - 我认为糟糕的可读性必须牺牲一些收益(可能是效率)。
标签: sql sql-server subquery