我有一个表和一个 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 设置为关闭。