我只是想知道你是否有一张桌子并且你加入它会比使用连接更有效吗?
我知道连接会创建更多的列,但这更理论化 - 联盟是否需要像连接一样对另一个表进行嵌套循环扫描?
答案 0 :(得分:22)
Union会更快,因为它只是传递第一个SELECT语句,然后解析第二个SELECT语句并将结果添加到输出表的末尾。
Join将遍历两个表的每一行,在另一个表中查找匹配项,因此需要进行更多处理,因为每行都在搜索匹配的行。
通过Union,我的意思是Union All,因为它似乎足以满足您的目标。虽然普通联盟通常比加入快。
我不同意他的看法。从技术上讲,无论您的加入有多好,“加入”仍然比纯连接更昂贵。我在我的博客codePERF[dot]net上发了一篇博文来证明这一点。实际上,它们有两个完全不同的用途,更重要的是确保您的索引正确并使用正确的工具来完成工作。
从技术上讲,我认为可以使用我的博客文章中的以下2个执行计划来总结:
UNION ALL
执行计划JOIN
执行计划实际上,聚集索引查找的差异可以忽略不计:
答案 1 :(得分:21)
JOIN
和UNION
有两个不同的目的。 JOIN
用于向查询添加其他表,以便添加选择条件和可能的其他列。 UNION
用于将两个不同查询的结果与相同列组合在一起。问哪个更有效就像问“哪条面包”和“吹风”更“橙”。
答案 2 :(得分:10)
很抱歉打破你的聚会,但写得好的联合会比工会更快。
答案 3 :(得分:2)
单个SELECT每个表使用不超过一个索引。 UNION在联合中每个SELECT使用不超过一个索引。
UNION将更好地利用索引,从而加快查询速度。