我必须跨多个表运行一个select语句。我确信这些表会返回不同的记录。我无论如何都在使用UNION ALL。
当我确定表返回不同的记录时,在性能方面使用UNION或UNION ALL会更好吗?
答案 0 :(得分:24)
当您不关心消除重复记录时,UNION ALL将比UNION表现更好,因为您避免了昂贵的distinct sort操作。请参阅:SQL SERVER – Difference Between Union vs. Union All – Optimal Performance Comparison
答案 1 :(得分:5)
UNION ALL总是更快,因为UNION排除了重复的条目
答案 2 :(得分:4)
UNION在内部实现两个查询。
1。SELECT
将返回数据集
2。DISTINCT
。
任何研究过数据库内部的人都可以很容易地理解DISTINCT
子句在处理方面成本极高。
如果您非常确定结果数据集不需要具有唯一行,那么我们可以跳过UNION
并使用UNION ALL
代替。
UNION ALL
将与UNION
相同,只是它不会激活DISTINCT
内部节省我们代价高昂的操作
答案 3 :(得分:1)
当你知道你想要所有的结果行时,最好使用UNION ALL,无论你是否知道它们是不同的。没有“全部”的UNION将始终执行“不同检查”,无论数据实际是什么。
答案 4 :(得分:0)
为什么UNION ALL更快?因为UNION必须进行排序以删除重复项。如果你不需要删除重复项,那么UNION ALL是更好的选择,但是UNION确实有用,应该在适当的时候使用。