如何优化PostgreSQL的多列搜索

时间:2019-03-31 14:33:43

标签: postgresql database-indexes

我在PostgreSQL中有一个表,它有20列,其中大多数是枚举类型。该表有数百万行。

我想支持并加快查询多个字段的行的查询,例如:col2=value1&col3=value2&col5=value3 page=1

我不能使用PostgreSQL的复合索引, 因为它仅适用于固定顺序的列。例如,如果我在(col2,col3,col5)上建立索引,则该索引不能用于搜索col1=value1&col2=value2

的查询

我还希望支持以下查询:

col1=value1&col2=(value3 or value4) orderby=col3 page=1

该问题的解决方案是什么?而且,如果我不需要在任何这些列上进行全文搜索(因为它们都是枚举类型),那么解决方案是否轻巧?

1 个答案:

答案 0 :(得分:1)

如果您想在搜索条件中使用OR,那就很糊糊了“game over” for performance(我有点夸张了。)

但是,如果您只有AND个和相等条件,那么我想请您注意Bloom filters

您只需要

CREATE EXTENSION bloom;

,然后一起在所有列上创建索引USING bloom

与其他索引不同,该单个索引可以使用WHERE条件下的列的所有可能组合来加快查询速度。索引只是一个过滤器,它会传递一些误报,因此始终必须重新检查条件,但是它将大大加快查询的速度。