我需要加速这个查询:
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扩展不是太熟悉...
有没有更聪明的方法来创建此查询的索引?或者使用文本支持函数?