[英]PostgresQL — GIN index and intersection with B-trees?
我有两个索引:
CREATE INDEX table_a_b ON table (a, b);
CREATE INDEX table_c_gin ON table USING GIN(c);
我的查询如下所示:
SELECT * FROM table WHERE a = 'test' and b = 1 and c @> '{"test1", "test2"}'::text[];
查询计划器将输出以下内容:
Index Scan using table_a_b on table (cost=0.13..8.15 rows=1 width=52)
Index Cond: (((a)::text = 'test'::text) AND (b = 1))
Filter: (c @> '{test1, test2}'::text[])
那么,有什么办法可以使GIN索引正常工作吗? 也许有一种方法可以创建具有两种不同索引类型的复合索引?
感谢任何帮助。
如果计划者认为值得这样做,则可以对table_a_b
使用位图索引扫描并汇总两个结果。 您必须查看EXPLAIN
的输出,以了解为什么它不选择这样做。
如果要创建组合索引,则必须安装btree_gin
扩展。 然后,您可以在GIN索引中使用text
和integer
列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.