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 的表现的主要内容,如果未能解决你的问题,请参考以下文章