PostgresQL - GIN索引和与B树的交集?

时间:2016-11-01 17:05:56

标签: sql postgresql

我有两个索引:

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索引工作吗?也许有办法用两种不同的索引类型创建复合索引?

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

如果规划人员认为值得这样做,可以在table_a_b上使用位图索引扫描并合并两个结果。您必须查看EXPLAIN的输出才能理解为什么它不会选择这样做。

如果要创建组合索引,则必须安装btree_gin扩展名。然后,您可以在GIN索引中使用textinteger列。