質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

1回答

4487閲覧

PostgreSQLで、全文検索を行う為のGINとGiSTインデックスの使い分けについて

iken

総合スコア47

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2014/08/06 03:55

私が知る限り、GINインデックスもGiSTインデックスも同じ問題を解決するのに使用します。

PostgreSQLドキュメントには以下のような情報がありました。

・GINインデックスの検索はGiSTの約3倍高速です
・GINインデックスの構築はGiSTの約3倍時間がかかります
・GINインデックスに対する更新はGiSTよりもそこそこ低速ですが、もし高速更新サポートを無効にしている場合は10倍の低速になります(詳細は項57.3.1を見てください)
・GINインデックスは、GiSTインデックスより2から3倍大きいです

このような情報があったのですが、私が特に気になっているのはメモリに対するインデックスサイズの割合が減ってくるとパフォーマンスに影響があるかということです。

GINはB-Treeと違って特定のクエリに関して、ディスクのどの部分を読むべきかわからないため全てのインデックスをクエリに格納する必要があるとどこかで読んだのですが、どうでしょうか。

これは本当でしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まず、どのような目的で必要なのでしょうか。

テキスト検索のインデックス作成のためにそれらが必要があるのでしょうか。

GINとGiSTは一部のデータ型に特化したインデックスです。もし簡単な文字列型または整数値をインデックスに必要がある場合は、通常のB-Treeインデックスが一番いいでしょう。

またPostgreSQLのドキュメントには、GISTとGINそれぞれに関する章があるので、それを読めばより具体的な情報が得られると思います。

最後に、どちらを使えばいいかという質問に対してですが、両方を比較する簡単な方法があります。

サンプルデータを生成し、GiSTインデックスを作成するのにどの程度時間がかかるか調べながら、GiSTインデックスを作成して、新しい値を挿入しサンプルクエリを実行して下さい。

そして、インデックスをドロップし、GINインデックスで全く同じことを行ってください。

両方の値を比較すればどちらを使うべきかというのが一目瞭然かと思います。

投稿2014/08/07 02:30

funaC

総合スコア58

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問