9

インデックス付き配列列を持つテーブルがあります。

CREATE TABLE mention (
  id SERIAL,
  phraseIds integer[],
  PRIMARY KEY (id)
);
CREATE INDEX indx_mentions_phraseIds on mention USING GIN (phraseids public.gin__int_ops);

この列で「重複」演算子を使用するクエリは、インデックスを使用していないようです。

explain analyze select m.id FROM mention m WHERE m.phraseIds && ARRAY[11638,11639];

Seq Scan on mention m  (cost=0.00..933723.44 rows=1404 width=4) (actual time=103.018..3751.525 rows=1101 loops=1)
Filter: (phraseids && '{11638,11639}'::integer[])
Rows Removed by Filter: 7019974
Total runtime: 3751.618 ms

Postgresql にインデックスを使用させることは可能ですか? それとも、何か他のことをするべきですか?

更新: 「SET enable_seqscan TO off」でテストを繰り返しましたが、インデックスはまだ使用されていません。

更新: 私は intarray 拡張で 9.2 を使用していることに言及する必要がありました。

更新: intarray 拡張がこの問題の一部であるようです。intarray 拡張機能を使用せずにテーブルを再作成したところ、インデックスが期待どおりに使用されました。intarray 拡張機能で使用するインデックスを取得する方法を知っている人はいますか? ドキュメント ( http://www.postgresql.org/docs/9.2/static/intarray.html ) によると、&& のインデックスがサポートされています。

4

1 に答える 1