我必须跨多个表运行选择语句。我确信这些表返回不同的记录。无论如何,我都在使用 UNION ALL。
当我确定表返回不同的记录时,在性能方面使用 UNION 或 UNION ALL 会更好吗?
我必须跨多个表运行选择语句。我确信这些表返回不同的记录。无论如何,我都在使用 UNION ALL。
当我确定表返回不同的记录时,在性能方面使用 UNION 或 UNION ALL 会更好吗?
当您不担心消除重复记录时,UNION ALL 将比 UNION 执行得更好,因为您避免了昂贵的不同排序操作。请参阅:SQL SERVER – Union 与 Union All 之间的区别 – 最佳性能比较
UNION ALL 总是更快,因为 UNION 排除了重复的条目
UNION 在内部实现两个查询。1.SELECT
这将返回一个数据集 2. DISTINCT
. 任何研究过数据库内部的人都可以很容易地理解,一个DISTINCT
子句在处理方面是极其昂贵的。
如果您非常确定生成的数据集不需要具有唯一行,那么我们可以跳过UNION
并UNION ALL
改用。
UNION ALL
将与它相同,UNION
只是它不会在DISTINCT
内部触发我们昂贵的操作
当您知道想要所有结果行时,最好使用 UNION ALL,无论您是否知道它们将是不同的。没有“all”的 UNION 将始终执行“distinct check”,无论数据实际是什么。
为什么 UNION ALL 更快?因为 UNION 必须进行排序以删除重复项。如果您不需要删除重复项,那么 UNION ALL 是更好的选择,但是 UNION 确实有目的,应该在适当的时候使用。