単純な等価チェック(=
)の場合、varchar
またはtext
列のBツリーインデックスはシンプルで最適な選択です。それは確かにパフォーマンスを助ける多くの。
もちろん、単純なBツリーインデックスinteger
が優れています。まず、単純なinteger
の値を比較するのは少し速いです。しかし、パフォーマンスはインデックスのサイズの関数でもあります。大きな列はデータページあたりの行数が少ないことを意味します。
HomeAddress
はほとんどの場合ユニークではないため、自然なプライマリキーではありません。代わりに代理プライマリキーを使用することを強くお勧めします。そのためにはserial
columnが明らかです。その唯一の目的は、操作が簡単で高速な主キーを持つことです。
上記のテーブルを参照する他のテーブルがある場合は、これがさらに効率的になります。外部キー列に長い文字列を複製するのではなく、整数列の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には多くのオプションがありますが、この単純なケースではもう必要ありません。
@Denisは、ユニーク制約がインデックスを自動的に確立することを指摘してくれてありがとう。 – Hao
パフォーマンスには、常に適用される1つのガイドラインがあります。テストします。そのような漠然とした記述からすべてのあなたのユースケースを得ることは不可能です。スピードについて質問しているときに、あなたにとって最速のものをテストしてください。理論的に最適ではないアプローチは、通常処理するデータに対してより高速です。 – omikron