数据是bytea格式的,我如何查询postgresql数据库,它在bytea列中索引,我需要通过前4个字节查询。我试过了
SELECT * FROM table WHERE addr LIKE '%8ac5c320____'
但需要很长时间才能找到。有什么建议?如果我查询整个字符串然后它工作得很快,但有大约20亿条目,我不能使用外卡...
答案 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));
这会创建一个专门为您需要经常运行的查询设计的索引。它是一个功能索引 - 它索引函数结果,而不是列。
这应该可以让你获得所需的表现。
尽管如此,您的示例查询实际上并不查询前四个字节。如果查询比您对查询的描述更正确,那么这种方法将无法正常工作。