我需要加快这个查询:
SELECT * FROM mytable
WHERE 'value' = ANY("citext_array_col") LIMIT 1;
其中citext_array_col
是一个 citext 数组。我试图创建一个操作员类:
CREATE OPERATOR CLASS gin__citext_ops
FOR TYPE citext[] USING gin
AS
OPERATOR 6 = (anyarray, anyarray),
FUNCTION 1 citext_cmp (citext, citext),
FUNCTION 2 ginarrayextract(anyarray, internal, internal),
FUNCTION 3 ginqueryarrayextract(anyarray, internal, smallint, internal, internal, internal, internal),
FUNCTION 4 ginarrayconsistent(internal, smallint, anyarray, integer, internal, internal, internal, internal),
STORAGE citext;
我可以用这个运算符类创建 GIN 索引,但它没用(set enable_seqscan = off
规划器仍然使用顺序扫描)。我不知道 ginqueryarrayextract() & co。做,没有关于这个的文档。
我发现的是 GIN 索引的 intarray 扩展,但代码是 C 语言,我对 PG C 扩展不太熟悉......
有没有更聪明的方法来为这个查询创建索引?也许使用文本支持功能?