2011-07-08 10 views
1

私はPostgreSQLデータベースの使用を検討しています。Postgresql:カラムに複数のインデックスがあり、目的に応じて異なるインデックスを使用できますか?

多くの場合、同じデータを使って別のことを行う必要があります。たとえば、LIKEで類似の文字列を検索しなければならないことがあります。時には、値が存在するかどうかをチェックする必要があります。

後者の場合、ハッシュインデックスが最適です。前者の場合、どちらが最善であるかはわかりませんが、ハッシュではないと確信しています。

同じデータに2種類のインデックスを作成し、SQLステートメントの一部として使用するDBを指定することは可能ですか?

私はpostgresql特有の情報に関心があり、一般的なリレーショナルDMSの機能に関心があります。

EDIT:私のタイトルが間違っていた:私は、複数のインデックスを持つことが可能であり、Postgresが自動的にそれはあなたのクエリに最も適していると考えていずれかを使用しますhashesindexes

+0

以下の回答は、複数のインデックスの処理では正しいです。あなたの質問に基づいて、私はちょうどPostgreSQLでハッシュインデックスを使用しないでください。彼らは現在クラッシュセーフではありません。他のすべてのインデックスタイプ(btree、gist、gin)とメソッドはもちろん、完全に上質です。 –

答えて

3

言葉を変えました。

+0

すごく感謝しますが、その決定プロセスでパフォーマンスが低下していますか?どのDBを使用するかを教えてもらえるといいでしょうか?例えば2億5千万の挿入をしなければならないが、それぞれの前に値が存在するかどうかを確認する必要がある場合、使用する最良のインデックスを指定できないためにパフォーマンスが低下することがあると思います。 – Ankur

+0

あなたの挿入シナリオでは、ユニークなインデックスを作成するだけで、残りの作業はPgが行います。特別なインデックス(つまり全文検索)を使用する必要がある場合に非常にユニークなクエリ要件がある場合は、適切なインデックスを使用する方法があります。 – Flimzy

0

Postgresは可能な限り最良のインデックスを使用し、使用するインデックスを確認するオーバーヘッドは最小限に抑えられます。測定可能ですらすべきではありません。 prepared statementsを使用して完全に削除することができます。さらに重要なことは、データの挿入や更新中に追加のインデックスを管理するのに必要な時間です。

テーブルが頻繁に変更される場合は、インデックスの数を最小限に抑える必要があります。

テーブルの変更が稀である場合や、速度が遅い場合は、好きなだけインデックスを作成できます。たとえば、まだリリースされていないPostgreSQL 9.1(ただし、現在は2番目のベータ版が利用可能で、開発に適しています)はspeed up LIKE searches significantly at the cost of slow updates/insertsです。

関連する問題