Sql 当我想要消除重复记录时,我应该使用Union all和Union中的哪一个?
作为标题 我已经看到,人们都说我们应该首先考虑工会,我的问题是我应该用哪一个来消除重复的记录。 我看到开发人员使用union all首先搜索记录,然后在项目源代码中用Java过滤重复记录,这有必要吗??在这种情况下,工会是更好的选择吗 谢谢 在过去(90年代中期),一些RDBMS引擎对Sql 当我想要消除重复记录时,我应该使用Union all和Union中的哪一个?,sql,performance,oracle,union,union-all,Sql,Performance,Oracle,Union,Union All,作为标题 我已经看到,人们都说我们应该首先考虑工会,我的问题是我应该用哪一个来消除重复的记录。 我看到开发人员使用union all首先搜索记录,然后在项目源代码中用Java过滤重复记录,这有必要吗??在这种情况下,工会是更好的选择吗 谢谢 在过去(90年代中期),一些RDBMS引擎对UNION的实现非常差,因此建议切换到UNION-ALL并在客户端上进行过滤通常是有回报的。然而,UNION的性能已经过优化,因此,对于现代RDBMS,必须根据具体情况做出决定: 当您执行联合时,数据库必须为您消
UNION
的实现非常差,因此建议切换到UNION-ALL
并在客户端上进行过滤通常是有回报的。然而,UNION
的性能已经过优化,因此,对于现代RDBMS,必须根据具体情况做出决定:
- 当您执行
,数据库必须为您消除重复项。如果查询返回的记录数很小(比如几百到一千),那么在哪里消除重复项无关紧要,因此您最好在RDBMS端进行联合时
- 当记录的数量达到数万条时,您可以通过利用数据的特定属性,以比RDBMS更智能的方式消除重复。在这种情况下,您将使用
联合所有
- 如果行数较大且重复项所占份额很大(例如,您从五个表中联合所有行,其中70%的行是重复的),则最好通过RDBMS消除重复项来节省网络带宽和客户端内存,并将要传输回您的数据大小减少70%
总而言之,没有普遍的情况。在做出这样或那样的决定之前,您需要进行一些计算并分析查询。根据SQL规范:
返回所选顺序中的所有行UNION ALL
删除重复项,但行顺序是任意的(通常已排序)UNION
UNION
删除重复项
如果可以的话,您应该避免使用UNION,因为删除重复项的典型方法是数据库对结果集进行排序。排序可能会很昂贵,尤其是对于大型结果集。谢谢!!!!!!!!!!!!!!!!!!!!!!!!