好的,这是我的情景:
编程语言:Java
我有一个MYSQL
数据库,大约有100,000,000个条目。
我在内存中有一个值列表valueList
,大约有10,000个条目。
我想迭代valueList
并检查此列表中的每个值是否与数据库中的匹配。
这意味着我必须进行至少10,000次数据库调用,这对我的应用程序来说非常低效。 其他方法是将整个数据库加载到内存中一次,然后在内存中进行比较。这很快但需要大量内存。
你们可以为这个问题建议一个更好的方法吗?
编辑:
假设valueList由以下值组成:
{"New","York","Brazil","Detroit"}
从数据库中,我将匹配Brazil
和Detroit
。但不适用于New
和York
,但New York
会匹配。因此,下一步是,在任何剩余的非匹配值的情况下,我将它们组合起来以查看它们是否匹配。因此,在这种情况下,我将New
和York
合并,然后找到匹配项。
在我之前关注的方法(逐个数据库调用)中,这是可能的。但是,如果创建一个临时表的方法,这是不可能的
答案 0 :(得分: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