我需要使用python和sql过滤大型数据库20亿个条目

时间:2017-09-20 20:47:17

标签: python sql django postgresql

数据是bytea格式的,我如何查询postgresql数据库,它在bytea列中索引,我需要通过前4个字节查询。我试过了

SELECT * FROM table WHERE addr LIKE '%8ac5c320____' 

但需要很长时间才能找到。有什么建议?如果我查询整个字符串然后它工作得很快,但有大约20亿条目,我不能使用外卡...

1 个答案:

答案 0 :(得分:1)

要根据前四个字节获取匹配项,我建议使用以下查询:

SELECT * FROM table WHERE substring(addr from 0 for 5) = '\x8ac5c320'::bytea;

可以在the bytea functions page上找到子字符串的文档,尽管这个文档很少。

写入的查询可能会在整个表中执行顺序扫描。要解决此问题,请创建以下索引:

CREATE INDEX ON table (substring(addr from 0 for 5));

这会创建一个专门为您需要经常运行的查询设计的索引。它是一个功能索引 - 它索引函数结果,而不是列。

这应该可以让你获得所需的表现。

尽管如此,您的示例查询实际上并不查询前四个字节。如果查询比您对查询的描述更正确,那么这种方法将无法正常工作。