union 与 union all 的表现

Posted

技术标签:

【中文标题】union 与 union all 的表现【英文标题】:performance of union versus union all 【发布时间】:2011-04-07 09:02:12 【问题描述】:

我必须跨多个表运行选择语句。我确信这些表会返回不同的记录。无论如何我都在使用 UNION ALL。

当我确定表返回不同的记录时,在性能方面使用 UNION 还是 UNION ALL 更好?

【问题讨论】:

To union or union all, that is the question的可能重复 【参考方案1】:

UNION 在内部实现两个查询。 1.SELECT 将返回一个数据集 2.DISTINCT。 任何研究过数据库内部的人都可以很容易地理解,DISTINCT 子句在处理方面的成本非常高。

如果您非常确定生成的数据集不需要具有唯一行,那么我们可以跳过 UNION 并改用 UNION ALL

UNION ALL 将与 UNION 相同,只是它不会在内部触发 DISTINCT,从而节省我们昂贵的操作

【讨论】:

【参考方案2】:

为什么 UNION ALL 更快?因为 UNION 必须进行排序以删除重复项。如果您不需要删除重复项,则 UNION ALL 是更好的选择,但 UNION 确实有目的,应该在适当的时候使用。

【讨论】:

【参考方案3】:

当您知道需要所有结果行时,最好使用 UNION ALL,无论您是否知道它们是否不同。不带“all”的 UNION 将始终执行“distinct check”,无论数据实际是什么。

【讨论】:

【参考方案4】:

当您不担心消除重复记录时,UNION ALL 将比 UNION 执行得更好,因为您避免了昂贵的 distinct sort 操作。见:SQL SERVER – Difference Between Union vs. Union All – Optimal Performance Comparison

【讨论】:

【参考方案5】:

UNION ALL 总是更快,因为 UNION 排除了重复的条目

【讨论】:

它并不“总是”更快。我现在正在做一些性能调整,发现 UNION 几乎是 UNION ALL 的两倍,即使结果查询返回完全相同的结果集。这是 MS SQL 服务器。我无法解释,希望其他人可以。

以上是关于union 与 union all 的表现的主要内容,如果未能解决你的问题,请参考以下文章

union与union all的区别

union all 和 union

union和union all 的写法

union all和union的区别 怎么使用

Union与Union All的区别

UNION 与 UNION ALL 的性能