38

私が見つけた情報から、どちらも同じ問題を解決します。配列の包含や共通部分(&&、@>、<@など)などのより難解な操作です。ただし、どちらを使用するか(またはどちらも使用しないか)についてのアドバイスに興味があります。PostgreSQL
のドキュメントには、これに関するいくつかの情報があります。

  • GINインデックスルックアップはGiSTの約3倍高速です
  • GINインデックスの構築にはGiSTの約3倍の時間がかかります
  • GINインデックスの更新はGiSTの約10倍遅い
  • GINインデックスはGiSTの2〜3倍です

ただし、メモリとインデックスのサイズの比率が小さくなり始めたとき(つまり、インデックスのサイズが使用可能なメモリよりもはるかに大きくなったとき)にパフォーマンスに影響があるかどうかを知りたいと思いますか?#postgresql IRCチャネルで、GINはすべてのインデックスをメモリに保持する必要があると言われました。そうしないと、Bツリーとは異なり、ディスクから読み込む部分がわからないため、効果的ではありません。特定のクエリ?質問は次のようになります:これは本当ですか(私もこれの反対を言われたので)?GiSTにも同じ制限がありますか?これらのインデックス付けアルゴリズムの1つを使用する際に注意する必要がある他の制限はありますか?

4

1 に答える 1

17

まず第一に、それらをテキスト検索の索引付けに使用する必要がありますか? GIN と GiST は、一部のデータ型に特化したインデックスです。単純な char または整数値にインデックスを付ける必要がある場合は、通常の B ツリー インデックスが最適です。
とにかく、PostgreSQL のドキュメントにはGISTに関する章とGINに関する章があり、詳細情報を見つけることができます。
最後になりましたが、どれが最適かを見つける最良の方法は、サンプル データを生成し (実際のシナリオである必要がある限り)、GIST インデックスを作成し、インデックスの作成に必要な時間を測定することです。新しい値を挿入し、サンプル クエリを実行します。次に、インデックスを削除し、GIN インデックスで同じことを行います。値を比較すると、データに基づいて必要な答えが得られます。

于 2008-08-25T17:00:24.947 に答える