【问题标题】:How to use Postgresql GIN index with ARRAY keyword如何使用带有 ARRAY 关键字的 Postgresql GIN 索引
【发布时间】:2021-07-05 21:03:24
【问题描述】:

我想使用ARRAY[] 表达式在标量文本列上创建GIN 索引,如下所示:

CREATE TABLE mytab (
 scalar_column TEXT
)

CREATE INDEX idx_gin ON mytab USING GIN(ARRAY[scalar_column]);

Postgres 报告ARRAY 关键字错误。

我稍后会在这样的查询中使用这个索引:

SELECT * FROM mytab WHERE ARRAY[scalar_column] <@ ARRAY['some', 'other', 'values'];

如何创建这样的索引?

【问题讨论】:

  • 您是否只是想检查scalar_column 的值是否与值列表之一匹配?如果是这样,您可以使用常规 btree 索引并过滤 WHERE scalar_column IN ('some', 'other', 'values')
  • 在这种情况下我应该使用哪个索引?
  • 作为一种解决方法,我已经这样做了CREATE INDEX idx_gin ON mytab USING GIN(string_to_array(scalar_column, ''));我想知道是否有适当的方法来创建这样的索引。
  • 索引和您的查询一开始没有任何意义。为什么你认为你需要一个数组表达式的索引?
  • 我认为带有 GIN 索引的 &lt;@ 运算符比没有索引的 = ANY 运算符快。您将如何加快针对给定数组检查值的查询?

标签: arrays postgresql indexing


【解决方案1】:

由于语法原因,您忘记添加一对额外的括号:

CREATE INDEX idx_gin ON mytab USING gin ((ARRAY[scalar_column]));

索引没有多大意义。如果您需要在给定数组中搜索成员资格,请使用带有 = ANY 的常规 B 树索引。

【讨论】:

  • 谢谢。请您详细说明该索引的用处。我想加快检查标量值是否在给定数组中的查询。
  • 我已经详细说明了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2020-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
相关资源
最近更新 更多