[英]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.