【じんいんでっくす】

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という略語がジンのお酒みたいだけど、中身はかなり高度な技術なんだ
← 用語集にもどる