如何优化PostgreSQL的多列搜索
我在PostgreSQL中有一个表,它有20列,大部分是枚举类型。这个表有数百万行 我想支持并加快搜索多字段行的查询,例如:如何优化PostgreSQL的多列搜索,postgresql,database-indexes,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或value4)or
col2=value1&col3=value2&col5=value3 page=1
我不能使用PostgreSQL的复合索引,
因为它只适用于固定顺序的列。例如,如果我在(col2,col3,col5)
上建立索引,那么它就不能用于搜索col1=value1&col2=value2
我还希望支持以下查询:
col1=value1&col2=(value3或value4)orderby=col3 page=1
这个问题的解决方案是什么?如果我不需要对这些列中的任何一列进行全文搜索(因为它们都是枚举类型),那么这个解决方案可以是轻量级的吗?如果你想在搜索条件中使用
或
,那就太糟糕了(我夸大了一点效果)
但是如果你只有和和相等条件,我想提醒你注意
你只需要
CREATE EXTENSION bloom;
然后在所有列上同时使用bloom
创建索引
与其他索引不同,此单一索引可以在WHERE
条件下使用所有可能的列组合加速查询。索引只是一个过滤器,将通过一些误报,因此必须始终重新检查条件,但它将显著加快查询速度。存在多少不同的col1…col20组合?我想说,可能有数百个不同的任何列组合,您可以将它们收集到一个单独的表中,由单个(代理)键寻址。