用語集のすべての用語

GIN インデックス

PostgreSQL の GIN インデックスとは?

GIN(汎用転置)インデックスは、配列の要素、JSONB のキー、テキスト検索の単語など、値の内部にある各要素を、それを含む行に対応付けます。

GIN は Generalized Inverted Index(汎用転置インデックス)の略です。インデックス対象の各項目が複数の要素を含む複合的な値と、特定の要素を含む項目を探すクエリのために設計されています。代表的な用途は、配列、jsonb、全文検索です。

デフォルトの演算子クラスでは、GIN は配列に対して @>(包含)や &&(重なり)などの演算子を、jsonb に対して @> とキー存在演算子をサポートします。検索は高速ですが、挿入と更新のコストは B-tree より高くなります。デフォルトで有効な fastupdate ストレージパラメータは、新しいエントリを保留リストにバッファリングして、このコストを軽減します。

例

この例では、text[] 列に GIN インデックスを作成し、tags に t42 を含む行について EXPLAIN で確認します。出力には docs_tags_gin に対する Bitmap Index Scan が表示されます。

CREATE TABLE docs (id int PRIMARY KEY, tags text[]);
INSERT INTO docs
SELECT g, ARRAY['t' || (g % 100), 'u' || (g % 7)] FROM generate_series(1, 100000) AS g;
CREATE INDEX docs_tags_gin ON docs USING gin (tags);
ANALYZE docs;

EXPLAIN SELECT id FROM docs WHERE tags @> ARRAY['t42'];

拡張機能なしの標準の PostgreSQL 16 または 17 で動くプレーンな SQL です。破棄してかまわない空のデータベースで実行してください。

出典

PostgreSQL 公式ドキュメント(英語)。

関連用語