一次インデックスと二次インデックスの定義には、ある程度の精度の欠如があります。
2つの人気のある大学のテキストを参照として使用する:
データベースシステムの基礎、Elmasri&Navathe それらを次のように定義します:
データベースシステム:完全な本、ガルシアモリーナ他al それらを次のように定義します:
上記のいずれかの定義に当てはまるいくつかのプロパティ:
- 主キーは主インデックスにすることができます
- テーブルごとに最大1つのプライマリインデックスを作成できます
- プライマリインデックスは、レコードが物理ストレージのどこに保持されるかを一意に決定します。
- 他のすべてのインデックスはセカンダリとして分類されます。
ただし、データファイル内のレコードの配置がどのフィールドによっても決定されていない場合、プライマリインデックスを作成することはできません。
したがって、並べ替えられたファイルの場合、プライマリインデックス(並べ替えの基になるフィールドのリスト)について話すのは理にかなっています。プライマリインデックスを作成できる物理ファイル構造の他の例は見つかりません。
Postgresqlは、レコードの物理ストレージにヒープ構造を利用します。ヒープはソートされていません(しゃれアラート:ソートされています)。したがって、主キーでさえ二次インデックスを使用して実装され、Postgresqlのすべてのインデックスは二次インデックスです。
他のRDBMSシステムは プライマリインデックスをサポートするストレージ形式を実装する:
- MySQLのInnoDBは、これをクラスター化インデックス と呼んでいます。
- MSSQLは、primayインデックスをクラスター化インデックス
- オラクルはこれを
index-organizedtablesと呼んでいます
Postgresドキュメントの言語は不正確です。
これは本当です。
これが、Postgresqlですべてのインデックスがセカンダリである理由ではありません。プライマリインデックスは、テーブルのメインデータ領域とは別に保存することもできます。