Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 对工会或全体工会来说,这是一个问题_Sql_Performance_Union All - Fatal编程技术网

Sql 对工会或全体工会来说,这是一个问题

Sql 对工会或全体工会来说,这是一个问题,sql,performance,union-all,Sql,Performance,Union All,我有两个正在联合的查询,这样我就知道两个查询之间不会有重复的元素。因此,UNION和UNION-ALL将产生相同的结果 我应该使用哪一个?您应该使用与您所要寻找的目的相匹配的一个。如果要确保没有重复项,请使用UNION,否则请使用UNION ALL。仅仅因为你的数据现在会产生相同的结果并不意味着它总是会产生相同的结果 也就是说,UNION-ALL在任何sane数据库实现上都会更快,有关示例,请参阅下面的文章。但通常情况下,它们是相同的,不同的是,UNION执行额外的步骤来删除相同的行(正如人们所

我有两个正在联合的查询,这样我就知道两个查询之间不会有重复的元素。因此,
UNION
UNION-ALL
将产生相同的结果


我应该使用哪一个?

您应该使用与您所要寻找的目的相匹配的一个。如果要确保没有重复项,请使用
UNION
,否则请使用
UNION ALL
。仅仅因为你的数据现在会产生相同的结果并不意味着它总是会产生相同的结果

也就是说,
UNION-ALL
在任何sane数据库实现上都会更快,有关示例,请参阅下面的文章。但通常情况下,它们是相同的,不同的是,
UNION
执行额外的步骤来删除相同的行(正如人们所期望的),并且它可能会支配执行时间


无论如何,我都会使用
UNION ALL
。即使您知道不会有重复项,这取决于您的数据库服务器引擎,但它可能不知道

所以,为了向DB服务器提供额外的信息,为了使其查询计划器(可能)有更好的选择,请使用
UNION ALL

话虽如此,如果您的DB服务器的查询计划器足够聪明,能够从
UNION
子句和表索引推断出信息,那么结果(性能和语义方面)应该是相同的


无论是哪种情况,它都在很大程度上取决于您使用的数据库服务器。

至少在性能方面,最好使用UNION ALL,因为它不会主动区分重复项,因此速度更快。

我看到您已经标记了这个性能问题,所以我认为这是您的主要考虑因素

UNION-ALL
将绝对优于
UNION
,因为SQL不必检查这两个集合的DUP


除非您需要SQL为您执行重复检查,否则请始终使用
UNION ALL

,因为两个使用UNION ALL的数据库中不会有重复项。您不需要检查重复项,UNION ALL将更有效地执行任务

我想他已经知道了。他在场景中明确地问,他知道(可能DB也知道)不会有重复。我不明白你的意思。你是在问,“如果SQL可以确定这两个集合中永远不会有重叠,它会优化
联合
,从而不必进行比较,使其执行与
联合所有
相同吗?”?回答:不。使用
UNION ALL
假设数据是从两个包含GUID的不相关表中提取的,我知道两个查询之间永远不会有重复的内容。@马克-这不是胡扯,它回答了两种类型的问题。主要问题是“我应该使用哪一个?”答案是“使用符合您意图的一个”。隐含的问题是“哪一个使用起来更快?”,答案是
UNION ALL
@Billy ONeal好的,在这种情况下,你可以非常自信,现在不产生重复的数据永远不会产生重复,至少在您目前使用的任何体系结构上,因为我怀疑您是否会很快耗尽GUID空间:)