Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何优化PostgreSQL的多列搜索_Postgresql_Database Indexes - Fatal编程技术网

如何优化PostgreSQL的多列搜索

如何优化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

我在PostgreSQL中有一个表,它有20列,大部分是枚举类型。这个表有数百万行

我想支持并加快搜索多字段行的查询,例如:
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组合?我想说,可能有数百个不同的任何列组合,您可以将它们收集到一个单独的表中,由单个(代理)键寻址。