2010-12-01 6 views
21

私はPostgresデータベースを持っていますが、それはプライマリキーでもなくても構いませんが、たくさん検索され、他のテーブルの2列と同等かどうか比較されます。Postgresで使用するインデックスの種類を決定する方法は?

これは、テーブルにインデックスを追加するのに最適なケースだと思います。私はこれまでデータベースでインデックスを使用していませんでしたので、これを行う正しい方法を学びたいと思っています。

私は、私が選ぶことができる複数のタイプの索引付けがあることを知りました。どのような方法が自分のデータベースにとって最も効率的であるかをどのように判断するのですか?また、適切な方法は、両方の列をカバーする単一のインデックスを作成することですか?

答えて

18

Postgresは、Bツリー、Rツリー、ハッシュ、GiSTおよびGINインデックスタイプをサポートしています。 Bツリー索引付けが最も一般的であり、最も一般的なシナリオに適合します。これは、構文は次のとおりです。ここで

CREATE INDEX idex_name ON table_name USING btree(column1, column2); 

createindexドキュメントであり、ここではpostgresの異なるindextypesの詳細です。

使用するインデックスの種類は、実行する操作の種類によって異なります。あなたが単に等価性検査をしたいならば、ハッシュインデックスが最高です。最も一般的な操作(例えば、比較、パターンマッチング)では、Bツリーを使用する必要があります。私は個人的にGiSTまたはGINのインデックスを使用していません。そこの誰の教祖?

ドキュメントには、これらのすべての種類が記載されています。彼らは私よりもあなたを助けることができます:)

これは役立ちます。

+0

ありがとうございました。私はちょっとした質問を更新しました。私は実際に平等のために純粋に見ているので、ハッシュインデックスが最高になると推測しています。 – Kellenjb

+2

ハッシュは複数の列にわたって機能しません。 2つの別々のハッシュが速く、1つの単一のb-treeであるかどうかを確認するためにいくつかの実験を行う必要があるだろうと思います。 – Kellenjb

+11

一般的に、ハッシュインデックスは使用しません。 「ハッシュインデックス操作は現在WALでログに記録されていないため、データベースがクラッシュした後にハッシュインデックスをREINDEXで再構築する必要があり、ストリーミングやファイルベースのレプリケーションではレプリケートされません。インデックスの使用は現在推奨されていません。 –

3

また、queryplannerも理解してください。PostgreSQLのこの部分はインデックスで動作する必要があるためです。 EXPLAIN ANALYZEはクエリを最適化するために不可欠です。