2

As title.

i have seen this, people all saying that we should consider union all first for the performance, my question is which one should i use when i want to eliminate duplicate records. i have seen that developer use union all to search the records first and then filter the duplicate records by Java in the source of our project, is that necessary?? Does the union will be the better choice for this case??

Thanks!

4

2 回答 2

2

在过去(90 年代中期),一些 RDBMS 引擎对 的实现非常差UNION,因此在客户端上切换UNION ALL和过滤的建议经常得到回报。然而,性能UNION已经优化,因此对于现代 RDBMS,必须根据具体情况做出决定:

  • 当您执行 aUNION时,数据库必须为您消除重复项。如果从查询返回的记录数很少(例如,几百到一千),那么在哪里消除重复项并不重要,因此您不妨在 RDBMS 端进行。
  • 当记录数达到数万时,您可以通过利用数据的特定属性以比 RDBMS 更智能的方式消除重复项。在这种情况下,您将使用UNION ALL.
  • 如果行数很大并且重复的份额非常大(例如,您UNION ALL来自五个表,其中 70% 的行是重复的),最好通过 RDBMS 消除重复来节省网络带宽和客户端内存,并将要传回给您的数据大小减少 70%。

总而言之,没有通用的场景。在以一种或另一种方式做出决定之前,您需要进行一些计算并分析您的查询。

于 2013-05-04T02:37:30.657 回答
0

根据 SQL 规范:

  • UNION ALL按选定顺序返回所有行
  • UNION删除重复项,但行顺序是任意的(通常是排序的)

所以UNION用来删除重复项。


如果可以的话,应该避免使用 UNION 的原因是删除重复项的典型方法是让数据库对结果集进行排序。排序可能很昂贵,特别是对于大型结果集。

于 2013-05-04T02:38:02.657 回答