24

私の PostgreSQL テーブルの 1 つに、テーブル内で一意であると定義される 2 つのフィールドのセットがありますが、データを選択するときに両方とも一緒に使用されます。この場合、UNIQUE INDEX を定義するだけでよいですか、それとも UNIQUE INDEX に加えて INDEX を指定する必要がありますか?

これ?

CREATE UNIQUE INDEX mytable_col1_col2_idx ON mytable (col1, col2);

それともこれ?

CREATE UNIQUE INDEX mytable_col1_col2_uidx ON mytable (col1, col2);
CREATE INDEX mytable_col1_col2_idx ON mytable (col1, col2);
4

1 に答える 1

42

UNIQUE INDEX がある場合は、INDEX も必要ありません。冗長になります。UNIQUE INDEX は、一意の制約であり、他のインデックスと同様に使用できるインデックスでもあります。

ドキュメントから:

: テーブルに一意の制約を追加するための推奨される方法は、ALTER TABLE ... ADD CONSTRAINT です。一意の制約を強制するためのインデックスの使用は、直接アクセスしてはならない実装の詳細と見なすことができます。ただし、一意の列に手動でインデックスを作成する必要はないことに注意してください。これを行うと、自動作成されたインデックスが複製されるだけです。

鉱山を強調します。

于 2010-12-25T21:10:51.467 に答える