在PostgreSQL中搜索快速标签(数组,GIN,seqscan)

时间:2013-03-30 12:15:17

标签: postgresql

我有一张桌子和一个GIN索引。

CREATE TABLE tags (id SERIAL PRIMARY KEY, tags text[], attrs text); 
CREATE INDEX tags_tags ON tags USING GIN("tags");

enable_seqscan默认开启)

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

查询以 1000-1600毫秒

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

相同的查询在 1-10 ms (快100-1000倍)中运行。

有人可以澄清为什么会发生这种情况以及是否有可能提示PostgreSQL在查询中使用GIN索引,而不将enable_seqscan设置为off。

1 个答案:

答案 0 :(得分:3)

好的,我发现有些事情可以回答我的问题。

当表变得更大时 - PostgreSQL终于开始使用索引了。

如果表处于常量写入状态 - 则不使用GIN索引。