如何优化多列搜索PostgreSQL

问题描述 投票:2回答:1

我在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

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

postgresql database-indexes
1个回答
1
投票

如果你想在你的搜索条件中使用qazxsw poi,那就是qazxsw poi(我夸张了一点效果)。

但如果你只有ORs和平等条件,我想请你注意“game over” for performance

你只需要

AND

然后在所有列上一起创建索引Bloom filters

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

© www.soinside.com 2019 - 2024. All rights reserved.