如何在 postgresql 中使用带有数组列的 GIN 索引?

Posted

技术标签:

【中文标题】如何在 postgresql 中使用带有数组列的 GIN 索引?【英文标题】:How to use GIN index with array column in postgresql? 【发布时间】:2021-01-28 05:25:41 【问题描述】:

我有一张类似这样的表格:

id uuid
ancestor_ids text[]

我需要执行一个查询来检索其中的第一个元素的祖先_ids 数组中的任何输入值的行。查询看起来像这样:

select * from table where ancestor_ids[1] in ('multiple', 'input', 'values');

查询工作正常,但鉴于我没有使用任何特殊运算符,我想知道向ancestor_ids 列添加索引是否会提高性能。是否可以优化查询? (表重新设计不是一种选择)

【问题讨论】:

【参考方案1】:

如果它始终是第一个元素,则不需要 GIN 索引。一个标准的 B-Tree 就可以了:

create index on the_table ( (ancestor_ids[1]) );

【讨论】:

我在尝试创建此索引时遇到错误:ERROR: syntax error at or near ")",是否可以索引特定的数组位置? @iamdeit:我错过了闭幕式) - 查看我的编辑 成功了!我不知道它需要双括号。谢谢!

以上是关于如何在 postgresql 中使用带有数组列的 GIN 索引?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 PostgreSQL 中索引数组列的位置?

PostgreSQL 可以索引数组列吗?

PostgreSQL 调用函数返回带有表和附加列的记录集

通过包过程插入带有可变数组列的表时出错

PostgreSQL/JDBC - 如何准备调用带有参数 CITEXT (TEXT) 的函数?

我可以从带有标题的csv文件中自动在PostgreSQL中创建一个表吗?