表演";“优化”;在java.util.ArrayList或SQL中设置操作

表演";“优化”;在java.util.ArrayList或SQL中设置操作,java,sql,query-optimization,set,set-operations,Java,Sql,Query Optimization,Set,Set Operations,这是我第一次需要问问题来解决我的查询,今天之前的线程能够解决我的查询 场景: 我在一个数据库中有两个表(比如A和B),其中有一些相同的行和一些不同的行。需要注意的是,这两个表都有数百万行,或者至少超过一百万行 现在我必须对它们执行集合操作,如相同行数(交叉点)、新行数(A-B)和旧行数(B-A) 我有两个选择: 1) 我可以在数据库上执行set操作作为查询 2) 或者我可以获取记录并在内存中的java.util.ArrayLIst上执行操作 但在这两种情况下,都需要花费5到10分钟的时间,这可能

这是我第一次需要问问题来解决我的查询,今天之前的线程能够解决我的查询

场景: 我在一个数据库中有两个表(比如A和B),其中有一些相同的行和一些不同的行。需要注意的是,这两个表都有数百万行,或者至少超过一百万行

现在我必须对它们执行集合操作,如相同行数(交叉点)、新行数(A-B)和旧行数(B-A)

我有两个选择: 1) 我可以在数据库上执行set操作作为查询

2) 或者我可以获取记录并在内存中的java.util.ArrayLIst上执行操作

但在这两种情况下,都需要花费5到10分钟的时间,这可能是最好的(优化的)方法


请提供帮助。

使用数据库方法,因为优化RDBMS的查询逻辑花费了数百人的时间。我确信您不想在您的客户机中复制此工作。如果当前使用SQL速度太慢,请确保所有必需的索引都已准备就绪,并对查询执行计划进行分析(不同的数据库管理系统如何执行该计划各不相同),以查找查询中的任何瓶颈(例如完整表扫描)。

我将由数据库决定

如果表中还没有主键,则可以在两个表中创建一列(索引),该列存储列值的散列,并使用该列进行更轻松的比较,例如:

SELECT COUNT(*)
FROM a JOIN b ON a.hash = b.hash
    AND a.ColA = b.ColA
    AND a.ColB = b.ColB

首先,
union
减号
等不是对表的操作,而是对
select
语句结果的操作。在您的例子中,您正在扫描巨大的表,创建巨大的结果集,然后比较每个结果。这很慢。您必须以可以使用索引的方式进行优化


第二,将结果从DB加载到Java,然后处理它们,这与在DB中处理和在Java中准备结果相比,本质上是较慢的。

表中的记录是否已修改?能否提供您使用的查询?感谢您对DB方法的回复。任何关于使用索引使查询更高效的教程。感谢您对DB方法的回复。任何关于使用索引使查询更高效的教程。感谢您对DB方法的回复。任何关于使用索引使查询更高效的教程。@Vijay,请为查询所用的列创建索引以进行匹配。e、 g.相同的。如果Java中的内存中有数据,查询速度会快得多,但是将数据放入内存的成本可能比在数据库中处理所有事情的成本要大得多。顺便说一句+1。