我有一张桌子和一个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。
答案 0 :(得分:3)
好的,我发现有些事情可以回答我的问题。
当表变得更大时 - PostgreSQL终于开始使用索引了。
如果表处于常量写入状态 - 则不使用GIN索引。