【じんいんでっくす】

GINインデックス とは?

💡 中身を全部バラして索引を作る!全文検索の立役者
📌 このページのポイント
GINインデックス(転置インデックス) ドキュメント Doc1: Python 入門 Doc2: Python と AI Doc3: SQL 入門 GINインデックス Python → Doc1, Doc2 入門 → Doc1, Doc3 AI → Doc2 Python? → 即座に発見! GINインデックスの活用場面 全文検索 JSONB検索 配列検索 タグ検索
GINインデックスのイメージ
ひよこ ひよこ

GINインデックスって普通のインデックスと何が違うの?

ペンギン先生 ペンギン先生

普通のB-treeインデックスは「この値と一致するか」の検索に強いけど、GINは「この値を含むか」の検索に強いんだよ。たとえば「この文章にPythonという単語が含まれるか」みたいな検索だね

ひよこ ひよこ

転置インデックスって何なの?

ペンギン先生 ペンギン先生

本の巻末にある「索引」と同じ仕組みだよ。普通は「ページ→単語」だけど、転置インデックスは「単語→ページ番号リスト」という逆引きの索引を作るんだ。だから特定の単語を含む文書を瞬時に見つけられるんだよ

ひよこ ひよこ

どんなときに使うの?

ペンギン先生 ペンギン先生

PostgreSQLでの全文検索、JSONB列の中身の検索、配列に特定の要素が含まれるかの検索などだよ。たとえば tags @> ARRAY['Python'] みたいなクエリがGINインデックスで高速化されるんだ

ひよこ ひよこ

デメリットはないの?

ペンギン先生 ペンギン先生

書き込みが遅くなるのがデメリットだね。データが追加されるたびにインデックスを更新する必要があるから。読み取りが多くて書き込みが少ないワークロードに向いているよ。書き込みが多い場合はGiSTインデックスの方が適していることもあるんだ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「GINインデックス」って出てきたら「全文検索JSON検索を速くするPostgreSQLの特殊インデックス」と思えればだいたいOK!
📖 おまけ:英語の意味
「Generalized Inverted Index」 = 汎用転置インデックス
💬 inverted index(転置インデックス)を汎用化(generalized)したものだよ。GINという略語がジンのお酒みたいだけど、中身はかなり高度な技術なんだ
← 用語集にもどる