他のバージョンの文書 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

11.2. インデックスの種類

PostgreSQLでは、B-tree、R-tree、Hash、GiSTといった複数の種類のインデックスを使用可能です。 インデックスの各種類は、異なる種類の問い合わせに最も適した、異なるアルゴリズムを使用します。 デフォルトでCREATE INDEXコマンドは、ほとんど一般的な状況に合うB-treeインデックスを作成します。 B-treeインデックスは、ある順番でソート可能なデータに対する等価性や範囲を問い合わせることを扱うことができます。 特に、PostgreSQLの問い合わせプランナでは、インデックスの付いた列を次の演算子を使用して比較する場合に、B-treeインデックスの使用を検討します。

<
<=
=
>=
>

また、BETWEENINなどのこれらの演算子の組み合わせと等価な式をB-treeインデックス検索で実装することができます (しかし、IS NULL=と異なり、インデックスではできません)。

オプティマイザは、パターンマッチ演算子LIKE~を含む問い合わせでも、そのパターンが定数であり、先頭文字列を指定している場合B-treeインデックスを使用することができます。 例えば、col LIKE 'foo%'またはcol ~ '^foo'です。 col LIKE '%bar'では使用されません。 しかし、サーバがCロケールを使用していない場合、パターンマッチ問い合わせのインデックス付けをサポートする特別な演算子クラスでインデックスを作成しなければなりません。 後述の項11.8を参照してください。 なお、ILIKE~*でもB-treeインデックスを使用することができますが、パターンが英字以外の文字、つまり、大文字小文字の違いの影響がない文字で始まる場合のみです。

R-treeインデックスは、特に二次元の空間的なデータに対する問い合わせに適しています。 R-treeインデックスを作成するには、以下のようなコマンドを使用してください。

CREATE INDEX name ON table USING rtree (column);

PostgreSQLの問い合わせプランナでは、インデックスの付いた列を次の演算子を使用して比較する場合に、R-tree インデックスの使用を検討します。

<<
&<
&>
>>
<<|
&<|
|&>
|>>
~
@
~=
&&

(上記の演算子の意味については、項9.10を参照してください。)

ハッシュインデックスは単純な等価性比較のみを扱うことができます。 問い合わせプランナでは、インデックスの付いた列を=演算子を使用して比較する場合に、ハッシュインデックスの使用を検討します。 ハッシュインデックスを作成するには、以下のようなコマンドを使用してください。

CREATE INDEX name ON table USING hash (column);

GiSTインデックスは1種類のインデックスではなく、多くの異なるインデックス戦略を実装できる基盤です。 したがって、GiSTインデックスを使用できる特定の演算子はインデックス戦略(演算子クラス)によって変動します。 詳細は第49章を参照してください。 PostgreSQLの標準配布物には、R-tree演算子クラスと同一のGiST演算子クラスが含まれています。 また、その他のGiST演算子クラスがcontrib内や別のプロジェクトからし要することができます。 詳細は第49章を参照してください。

注意: 試験の結果、PostgreSQLのハッシュインデックスの性能はB-treeインデックスより悪く、また、ハッシュインデックスのインデックスサイズと構築時間もかなり劣っていることが分かりました。 さらに、現在ハッシュインデックス操作はWALに記録されません。 そのため、データベースクラッシュの後ハッシュインデックスを再構築しなければならない可能性があります。 これらの理由により、ハッシュインデックスの使用は現在お勧めできません。

同様に、R-treeインデックスもGiSTインデックスによる同じ操作と比べ性能上の利点があるとは思われません。 ハッシュインデックスと同様、WALに記録されませんので、データベースクラッシュの後インデックスの再構築が必要になるかもしれません。

ハッシュインデックスに関する問題は将来修正されるかもしれませんが、R-treeインデックス種類は将来のリリースでなくなる予定です。 R-treeインデックスを使用するアプリケーションをGiSTインデックスに移行することが奨励されています。