用于任何查询的数组列的 Postgres 索引类型

Postgres index type for array column for ANY queries

我有一个 Postgres table,其中有一列是字符串数组。将使用此列完成的唯一搜索将是 IS NULL / IS NOT NULL 和查询数组包含某些值的行(例如,'vote'=ANY(T.column))。

现在,我知道 GIN 索引支持 <@ 运算符,它检查一个数组的元素是否包含在另一个数组中(其中 ANY 实际上是 1 的特例元素数组)。然而, seems to suggest that ANY works fine with B-tree indexes as does Shana K's answer from 的答案(实际上她建议 <@ 与他们一起工作)。

然而,Postgres docs似乎只提到了B树支持的<=<=等。我需要什么索引来支持搜索数组列包含指定值的行的查询?

编辑: 由于发布了这两个答案,现在已经更新为不再建议 B 树索引有效。

这里有一个详细的解释,为什么 ANY 构造 右边的索引列 不能进入 GIN 索引(或任何索引,就此而言) :

  • Can PostgreSQL index array columns?

但是array operators可以。参见:

  • Check if value exists in Postgres array

要强制使用小 table 进行测试,您可以在当前会话中禁用(实际上是非常不鼓励)顺序扫描:

SET enable_seqscan = OFF;

参见:

  • Postgres query optimization (forcing an index scan)