我在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
这个问题的解决方案是什么?如果我不需要对这些列中的任何列进行全文搜索(因为它们都是枚举类型),解决方案是否可以轻量级?
如果你想在你的搜索条件中使用qazxsw poi,那就是qazxsw poi(我夸张了一点效果)。
但如果你只有OR
s和平等条件,我想请你注意“game over” for performance。
你只需要
AND
然后在所有列上一起创建索引Bloom filters。
与其他索引不同,此单个索引可以加速CREATE EXTENSION bloom;
条件中所有可能的列组合的查询。索引只是一个会传递一些误报的过滤器,因此必须重新检查条件,但它会显着加快查询速度。