他のバージョンの文書 15 | 14 | 13 | 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

7.2. インデックスの型

PostgreSQLは、B-tree、R-tree、GiST、Hashといったインデックス型を提供しています。各インデックス型は、使用しているアルゴリズムがそれぞれ異り、特定の問い合わせ型にふさわしいようになっています。 デフォルトでは、CREATE INDEXコマンドはB-treeインデックスを作成します。これは一般的な状況に適切なインデックスです。特にPostgreSQLの問い合わせオプティマイザは、インデックスのついた列が下記の演算子を使って比較されるたびに、B-treeの使用を検討します。 <, <=, =, >=, >

R-treeインデックスは、特に空間的データに適しています。R-treeインデックスを作るためには、下記のようなコマンドを使ってください。

CREATE INDEX name ON table USING RTREE (column);

PostgreSQLの問い合わせオプティマイザは、インデックスのついた列が下記の演算子のいずれかを使って比較されるたびにR-treeインデックスの使用を検討します。 <<, &<, &>, >>, @, ~=, && これらの演算子の意味については、Section 4.9を参照してください。

問い合わせオプティマイザは、インデックスのついた列が=演算子を使って比較が行なわれるたびに、hashインデックスの使用を検討します。hashインデックスを作るためには下記のコマンドが使われます。

CREATE INDEX name ON table USING HASH (column);

Note: hashインデックスが万能ではないため、通常はhashインデックスよりもB-treeインデックスの使用が推奨されています。 =の比較の場合でさえも、B-treeよりhashの方が速いという確かな証拠はありません。さらに、hashインデックスは粒度の粗いロックを必要とします(Section 9.7を参照して下さい)。

B-treeインデックスはLehman-Yao高同時実行性B-treeの実装です。R-treeインデックスメソッドは、Guttmanの二次分割アルゴリズムを使った、標準R-treeを実装しています。hashインデックスはLitwinの線形ハッシュの実装です。これらのアクセスメソッドは完全に動的であり、定期的に最適化する必要がない(たとえば、静的hashアクセスメソッドのような場合)ということを示すために、使用アルゴリズムについて言及しています。