如何优化 PostgreSQL 的多列搜索

Leo*_*ang 2 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

解决这个问题的方法是什么?如果我不需要对这些列中的任何列进行全文搜索(因为它们都是枚举类型),那么解决方案可以是轻量级的吗?

Lau*_*lbe 5

如果您想要在搜索条件中使用 an OR,那么对于性能而言,这几乎是“游戏结束”(为了效果,我夸大了一点)。

但如果你只有ANDs 和相等条件,我想提请你注意布隆过滤器

你只需要

CREATE EXTENSION bloom;
Run Code Online (Sandbox Code Playgroud)

然后USING bloom对所有列一起创建索引。

与其他索引不同,此单个索引可以加快条件中所有可能的列组合的查询速度WHERE。索引只是一个过滤器,会传递一些误报,因此总是必须重新检查条件,但它会显着加快查询速度。