2013-03-30 20 views
3

我有一個表格和一個GIN索引。在PostgreSQL中搜索快速標籤(數組,GIN,seqscan)

enable_seqscan是在默認情況下)

SET enable_seqscan TO on; 
SELECT id FROM tags WHERE tags @> array['category_72']; 

查詢運行在1000-1600 MS

SET enable_seqscan TO off; 
SELECT id FROM tags WHERE tags @> array['category_72']; 

相同的查詢在1-10毫秒運行(100-快1000倍)。

有人可以澄清爲什麼會發生這種情況,以及是否可以提示PostgreSQL在查詢中使用GIN索引,而不設置enable_seqscan關閉。

+0

您是否有統計數據? (在創建索引後運行'真空分析標籤;' – wildplasser

+0

感謝您的建議!我現在試圖做到這一點 - 這並沒有改變行爲。 –

+0

如果您顛倒查詢順序,是否會得到相同的行爲? – didierc

回答

3

好吧,我發現有幾件事可以回答我的問題。

當表格變大時 - PostgreSQL最終使用索引。

如果表在恆定寫入下 - 那麼不使用GIN索引。