単純な同等性チェックの場合(=
)、varchar
のBツリーインデックス またはtext
列はシンプルで最良の選択です。それは確かにパフォーマンスに役立ちます 。
もちろん、単純なinteger
のBツリーインデックス パフォーマンスが向上します。手始めに、単純なinteger
を比較する 値は少し速くなります。しかし、さらに重要なことは、パフォーマンスはインデックスのサイズの関数でもあるということです。列が大きいほど、データページあたりの行数が少なくなり、より多くのページを読み取る必要があることを意味します...
HomeAddress
以降 とにかくユニークなものはほとんどなく、自然な主キーとしては適切ではありません。 代理主キーを使用することを強くお勧めします 代わりは。 serial
列
そのための明白な選択です。その唯一の目的は、操作するためのシンプルで高速な主キーを持つことです。
上記のテーブルを参照する他のテーブルがある場合、これはさらに効率的になります。外部キー列に長い文字列を複製する代わりに、整数列に必要なのは4バイトだけです。また、アドレスは変更される可能性があるため、更新をカスケードする必要はあまりありませんが、代理pkは同じままです(もちろん、そうする必要はありません)。
テーブルは次のようになります:
CREATE TABLE resident (
resident_id serial PRIMARY KEY
,address text NOT NULL
-- more columns
);
CREATE INDEX resident_adr_idx ON resident(address);
これにより、2つのBツリーインデックスが作成されます。 resident_id
の一意のインデックス address
のプレーンインデックス 。
マニュアルのインデックスの詳細
。
Postgresには多くのオプションがありますが、この単純なケースではこれ以上必要ありません。