2011-01-10 68 views
1

我需要将一组URL(50000 - 100000)与数据库表的记录进行比较,大约有20,000.000行。我有一些遗留代码通过将数据库中的所有数据加载到散列并进行比较来完成此操作。虽然这可行,但它需要在内存方面进行改进(速度目前不是问题)。新数据与大型数据库记录的高效比较

我正在考虑的一种替代方法是分割输入数据(例如按域)并对数据库执行多个选择。这可能适用于某些输入,但不会为所有内容扩展。

另一种替代方法是为每个输入查询数据库,而不是将任何数据加载到内存中。恐怕这可能太慢了。

我正在使用mysql。任何人都会遇到像这样的问题?将所有数据迁移到另一个系统/ dbms是一个选项。


+0

100K可以选择每如果索引设置正确,形成得足够快。 – zerkms

+0

我们是否应该假定通过直接的SQL查询来做到这一点不起作用? –

+0

这是一个选项。我会尽力先做,看看它是如何工作的。我只是想知道在哪里有一个更有效的方法来做到这一点。 – luis

回答

2

假设你已经在列的索引,并做一个简单的比较a = b比查询每个输入不应该是一个问题。

使用索引时,这样的查询应该不会超过几毫秒,因此即使使用50,000个URL,查询时间也不应超过10分钟。

+1

是的,它可以通过比较而不是'=',而是通过'url IN(10-50-100 urls)'来加速。 – zerkms

0

定义唯一键上的网址列(假设已经是唯一的),
添加一列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 ...