3

我有一个表和一个 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 毫秒内运行(快 100-1000 倍)。

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

4

1 回答 1

3

好的,我发现了一些可以回答我的问题的东西。

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

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

于 2013-03-30T12:40:21.093 回答