我有一个包含1.21亿字符串的文本文件,我想执行5000搜索存在(即如果此文本文件中是否存在给定字符串),我想在2秒或更短时间内完成这5000次检查。< / p>
我想到了不同的方法,我尝试将文本文件中的所有字符串放入一个带有字符串列主索引的SQL表中,并执行此查询5000次:
select * from table where string=given_string
然后检查结果是否存在,但这种方式导致整个5000查询的执行时间非常长,介于20到30秒之间。
我想知道是否有一种有效的方法可以索引/处理这些数据,并以有效的方式在其中搜索5000次。
答案 0 :(得分:0)
你可以添加另一个(临时)表(甚至在内存中)并在那里批量插入5000个搜索值。然后创建一个将此表连接到您的大表的查询。
这样您只有2个查询而不是5000个。
也许这会加速一些事情。
答案 1 :(得分:0)
答案 2 :(得分:0)
basic
然后使用LOAD DATA填充它。搜索
CREATE TABLE TheStrings (
s VARCHAR(..) NOT NULL,
PRIMARY KEY(s)
) ENGINE=InnoDB;
第一次运行它时,由于I / O,它会很慢。 (旋转磁盘似乎有20-30秒。)第二次将是测量的东西;我希望它不到一秒钟。
使用SSD,即使第一个查询也可能低于你的2秒目标。
你说SELECT s FROM TheStrings
WHERE s IN ('one', 'two', 'lots', 'more' ...);
- 还有其他专栏吗?这可能会影响答案;请提供详细信息。