作为标题。
我见过this,所有人都说我们应该首先考虑联合表演,我的问题是当我想要消除重复记录时应该使用哪一个。 我已经看到开发人员使用union all首先搜索记录,然后在我们项目的源代码中用Java过滤重复记录,这是必要的吗?对于这种情况,联盟是否会是更好的选择?
谢谢!
答案 0 :(得分:2)
在过去(九十年代中期),一些RDBMS引擎的UNION
实现非常糟糕,因此建议切换到UNION ALL
并在客户端上进行过滤通常会得到回报。然而,UNION
的性能已得到优化,因此对于现代RDBMS,必须根据具体情况做出决定:
UNION
时,数据库必须为您删除重复项。如果从查询返回的记录数量很少(比如几百到一千),那么消除重复项的位置无关紧要,所以你不妨在RDBMS方面这样做。UNION ALL
。UNION ALL
,其中70%的行是重复的),那么节省网络带宽可能会更好通过让RDBMS消除重复数据来减少客户端内存,并将要传输回数据的数据减少70%。总而言之,没有普遍的情况。在做出某种决定之前,您需要进行一些计算并对查询进行概要分析。
答案 1 :(得分:0)
根据SQL规范:
UNION ALL
返回所选订单中的所有行UNION
删除重复项,但行顺序是任意的(通常是排序的)因此请使用UNION
删除重复项。
如果可以的话,你应该避免UNION的原因是删除重复项的典型方法是数据库对结果集进行排序。排序可能很昂贵,特别是对于大型结果集。