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

现在,我知道GIN索引支持<@运算符,该运算符判断一个数组的元素是否包含在另一个数组中(其中ANY实际上是1元素数组的特例).然而,this question的答案似乎表明ANY可以与B树索引配合使用,就像Shana K从this question得到的答案一样(实际上她建议<@可以与B树索引配合使用).

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

推荐答案

下面详细解释了为什么ANY构造with the indexed column to the right不能利用GIN索引(或任何索引):

但是array operators个可以.请参见:

要强制使用一个小表进行测试,您可以在当前会话中禁用(非常不鼓励)顺序扫描,方法是:

SET enable_seqscan = OFF;

请参见:

Sql相关问答推荐

SQL:创建查询以添加减少的总数

如何在不更改S代码的情况下,判断存储过程调用了多少次clr函数?

PostgreSQL抽奖查询

过go 四周未填充的数据,即W50,51,52-SQL

每年独特口味的冰淇淋数量

在一个子查询中签入ID';S,如果未返回,则签入另一个子查询

如何找到一个组合的两个列,这是不是在其他表在ORACLE SQL?

在UNION查询中查找MIN

删除所有订单中可用的重复值

SQL查询正在工作,但返回空结果

postgres中的条件索引和触发器

如何使用jsonn_populate_record()插入到包含IDENTITY列的表中

用替代方案替换 SQL Cursor 以提高性能

如何用SQL组合客户拥有的产品

如何使用Informix创建一个临时表,将数据从根表导入并使用筛选条件

根据行号将列转置为没有任何id或键列的行

使用 regexp_replace 替换所有出现的特殊字符

PostgreSQL Select 具有两列的自引用

SQL/Postgres:按日期和其他属性对相关性能进行分组

在 SQL 中将行显示为列