我需要将一组URL(50000 - 100000)与大约20.000.000行的数据库表的记录进行比较。我有一些遗留代码通过将数据库中的所有数据加载到散列并在之后进行比较来实现此目的。虽然这有效,但需要在内存方面进行改进(速度现在不是问题)。
我正在考虑的另一种方法是分割输入数据(例如,通过域)并对数据库进行多次选择。这可能适用于某些输入,但不会扩展所有内容。
另一种方法是查询数据库中的每个输入,而不是将任何数据加载到内存中。我担心这可能太慢了。
我正在使用mysql。有没有像这样的问题经验?将所有数据迁移到另一个系统/ dbms是一种选择。
答案 0 :(得分:2)
假设您在列上有索引并且正在进行简单的a = b
比较,那么查询每个输入应该不是问题。
使用索引时,这样的查询不应该花费超过几毫秒的时间,因此即使使用50.000 url也不会超过10分钟。
答案 1 :(得分:0)
在url列上定义唯一键(假设已经是唯一的),
将列row_count添加到大表
alter table big_table add column_row_count int(1) not null default 0;
insert into big_table
select all_columns, 0 from small_table
on duplicate key set row_count=1;
那些row_count=1
是重复的记录
或者你没兴趣找回重复的记录, 只需做一个
insert ignore ...