インデックスの種類

PostgreSQL 9.0.0文書
前のページ | 巻戻し | 第 11章インデックス | 早送り | 次のページ

# 11.2. インデックスの種類

PostgreSQLでは、B-tree、Hash、GiST、GINといった複数の種類のインデックスを使用可能です。 インデックスの各種類は、異なる種類の問い合わせに最も適した、異なるアルゴリズムを使用します。 デフォルトで`CREATE INDEX`コマンドは、B-treeインデックスを作成し、それはほとんどの一般的状況に適合します。

B-treeインデックスは、ある順番でソート可能なデータに対する等価性や範囲を問い合わせることを扱うことができます。 特に、PostgreSQLの問い合わせプランナでは、インデックスの付いた列を次の演算子を使用して比較する場合に、B-treeインデックスの使用を検討します。

`<`
`<=`
`=`
`>=`
`>`

また、`BETWEEN`や`IN`などのこれらの演算子の組み合わせと等価な式をB-treeインデックス検索で実装することができます。 インデックスの付いた列に対する`IS NULL`や`IS NOT NULL`でもB-treeインデックスを使用することができます。

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

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

    CREATE INDEX name ON table USING hash (column);

> 注意: 現在ハッシュインデックス操作はWALに記録されません。 そのため、データベースクラッシュの後ハッシュインデックスを再構築しなければならない可能性があります。 この理由により、ハッシュインデックスの使用は現在お勧めできません。

GiSTインデックスは単一種類のインデックスではなく、多くの異なるインデックス戦略を実装することができる基盤です。 したがって、具体的なGiSTインデックスで使用できる演算子はインデックス戦略（演算子クラス）によって異なります。 例えば、PostgreSQLの標準配布には、複数の二次元幾何データ型用のGiST演算子クラスが含まれています。 これらの演算子を使用してインデックス付けされた問い合わせをサポートします。

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

（これらの演算子の意味については項9.11を参照してください。） 他の多くのGiST演算子クラスが`contrib`集合や別のプロジェクトとして利用可能です。 詳細は第52章を参照してください。

GINは転置インデックスであり、例えば配列など複数のキーを持つ値を扱うことができます。 GiST同様、GINも多くの異なるユーザ定義のインデックス戦略を持つことができ、GINが使用できる具体的な演算子はインデックス戦略によって変化します。 例えば、PostgreSQL標準配布物には、1次元配列用のGIN演算子クラスが含まれています。 これは、以下の演算子を使用する問い合わせに対するインデックスをサポートします。

`<@`
`@>`
`=`
`&&`

（これらの演算子の意味については項9.17を参照してください。） 他の多くのGIN演算子クラスは`contrib`群または別のプロジェクトで利用可能です。 詳細は第53章を参照してください。

前のページ | ホーム | 次のページ
序文 | 上に戻る | 複数列インデックス