“我试图用java通过通过JDBC连接列表中存储两个表中的数据,然后遍历一个列表与其他。但它是非常缓慢的,花了很多时间来完成,甚至很多时候都有超时的例外。“
恭喜。这是通往启蒙之路的第一步。数据库比Java更好地处理数据。 Java是一种很好的通用编程语言,但是数据库针对关系数据处理进行了优化:它们只是以更快的速度,更少的CPU,更少的内存和更少的网络流量进行操作。
“我还创建了一个SQL程序一样,它是一些比Java程序快了什么,但 还是花了很多时间(几个小时) 完成。“
你在第二步的边缘以启示:一行一行地处理(即程序迭代)是缓慢的SQL是基于集合的模式设置处理的速度要快得多
。
要给予具体的建议,我们需要你的做法其实一些细节,但作为一个例子该查询会给你设定的这些列匹配的两个表中:
select col1, col2, col3
from huge_table_1
INTERSECT
select col1, col2, col3
from huge_table_2
减号来会给你的huge_table_1
中的行不在huge_table_2
中。翻转表来获得正面设置。
select col1, col2, col3
from huge_table_1
MINUS
select col1, col2, col3
from huge_table_2
拥抱欢乐套装!
“我们首先在比较中huge_table_1名字不应该是平等的 在huge_table_2的名字,然后我们在huge_table_1 比较城市应该等于城市huge_table_2然后最后我们 比较在huge_table_1中的date_of_birth应该在+ 1年内 在huge_table_2中的date_of-birth的范围“
嗯。从不平等开始往往是不好的,特别是在大型表格中。很可能你会有许多不匹配的名字和那些匹配的标准。但你可以尝试这样的事情:
select * from huge_table_1 ht1
where exists
(select null from huge_table_2 ht2
where ht2.city = ht1.city
and ht1.date_of birth between add_months(ht2.date_of birth, -12)
and add_months(ht2.date_of birth, 12)
and ht2.name != ht1.name)
/
来源
2017-04-14 07:10:23
APC
你能分享表和列的列,你在哪些基础上比较这些表。 – Usama
首先,因为您已经拥有数据库中的数据,所以Java肯定不是比较的正确解决方案。至于DB,这样的任务不仅需要调整查询,数据存储,数据库和表格定义,索引,硬件等都扮演着更重要的角色。这是一个广泛的领域,您应该与您的DBA讨论。 –