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 倍高速)。

enable_seqscanをオフに設定せずに、なぜこれが起こっているのか、PostgreSQLがクエリでGINインデックスを使用するように示唆できるかどうかを誰かが明確にしてください。

4

1 に答える 1

3

わかりました、私の質問に答えるかもしれないことを発見したことがいくつかあります。

テーブルが大きくなると、PostgreSQL はついにインデックスを使用するようになりました。

テーブルが一定の書き込みを受けている場合、GIN インデックスは使用されません。

于 2013-03-30T12:40:21.093 に答える