5

好的,这是我的场景:

编程语言:Java

我有一个MYSQL包含大约 100,000,000 个条目的数据库。

我在内存中有一个值列表,比如valueList大约 10,000 个条目。

我想遍历valueList并检查此列表中的每个值是否在数据库中都有匹配项。

这意味着我必须进行至少 10,000 次数据库调用,这对我的应用程序来说效率非常低。另一种方法是将整个数据库加载到内存中一次,然后在内存中进行比较。这速度很快,但需要大量内存。

你们能提出一个更好的方法来解决这个问题吗?

编辑 :

假设 valueList 由以下值组成: {"New","York","Brazil","Detroit"}

从数据库中,我将匹配BrazilDetroit。但不是 forNewYork,虽然New York会匹配。所以下一步是,如果有任何剩余的不匹配值,我将它们组合起来看看它们现在是否匹配。所以在这种情况下,我组合New然后York找到匹配项。

在我之前遵循的方法(一个一个的数据库调用)中,这是可能的。但是在创建临时表的方法的情况下,这是不可能的

4

1 回答 1

7

您可以使用这样的单个插入将 10k 记录插入临时表中

insert into tmp_table (id_col)
values (1),
       (3),
       ...
       (7);

然后加入 2 个表以获得所需的结果。

我不知道你的表结构,但它可能是这样的

select s.* 
from some_table s
inner join tmp_table t on t.id_col = s.id
于 2013-10-08T06:44:58.100 回答