如标题。
我见过this ,人们都说为了性能我们应该首先考虑union all,我的问题是当我想消除重复记录时我应该使用哪一个。 我看到开发人员在我们项目的源代码中使用union all先搜索记录,然后通过Java过滤重复记录,有必要吗?对于这种情况,工会会是更好的选择吗?
谢谢!
最佳答案
过去(九十年代中期),一些 RDBMS 引擎对 UNION
的实现非常差,因此建议经常切换到 UNION ALL
并在客户端进行过滤已付。然而,UNION
的性能已经过优化,因此对于现代 RDBMS,必须根据具体情况做出决定:
- 当您执行
UNION
时,数据库必须为您消除重复项。如果查询返回的记录数量很少(例如几百到一千),那么在哪里消除重复项并不重要,所以您最好在 RDBMS 端进行。 - 当记录数量达到数万时,您可以通过利用数据的特定属性,以比 RDBMS 更智能的方式消除重复项。在这种情况下,您将使用
UNION ALL
。 - 如果行数很大并且重复项的比例非常大(例如,您对五个表进行
UNION ALL
,其中 70% 的行是重复的),那么最好节省通过使用 RDBMS 消除重复项来节省网络带宽和客户端内存,并将传回给您的数据大小减少 70%。
总而言之,不存在通用的场景。在以某种方式做出决定之前,您需要进行一些计算并分析您的查询。
关于sql - 当我想消除重复记录时,Union all 和 union 应该使用哪一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16369973/