我有两个索引:
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索引工作吗?也许有办法用两种不同的索引类型创建复合索引?
感谢任何帮助。
答案 0 :(得分:1)
如果规划人员认为值得这样做,可以在table_a_b
上使用位图索引扫描并合并两个结果。您必须查看EXPLAIN
的输出才能理解为什么它不会选择这样做。
如果要创建组合索引,则必须安装btree_gin
扩展名。然后,您可以在GIN索引中使用text
和integer
列。