在1亿多字符串中搜索存在5000次有效

时间:2016-07-11 13:14:35

标签: mysql search optimization

我有一个包含1.21亿字符串的文本文件,我想执行5000搜索存在(即如果此文本文件中是否存在给定字符串),我想在2秒或更短时间内完成这5000次检查。< / p>

我想到了不同的方法,我尝试将文本文件中的所有字符串放入一个带有字符串列主索引的SQL表中,并执行此查询5000次:

select * from table where string=given_string

然后检查结果是否存在,但这种方式导致整个5000查询的执行时间非常长,介于20到30秒之间。

我想知道是否有一种有效的方法可以索引/处理这些数据,并以有效的方式在其中搜索5000次。

3 个答案:

答案 0 :(得分:0)

你可以添加另一个(临时)表(甚至在内存中)并在那里批量插入5000个搜索值。然后创建一个将此表连接到您的大表的查询。

这样您只有2个查询而不是5000个。

也许这会加速一些事情。

答案 1 :(得分:0)

这取决于您的数据。

如果搜索的字符串大部分 ,那么数据排序和使用prefix tree数据结构将有很大帮助

如果搜索到的字符串大部分不在集合中:您可以尝试使用Bloom filter

之类的内容

答案 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' ...); - 还有其他专栏吗?这可能会影响答案;请提供详细信息。