Postgresと外部キーおよび主キーのインデックス 質問する

Postgresと外部キーおよび主キーのインデックス 質問する

Postgres は外部キーと主キーにインデックスを自動的に配置しますか? どうすればわかりますか? テーブルのすべてのインデックスを返すコマンドはありますか?

ベストアンサー1

PostgreSQL は、主キーと一意制約に対して自動的にインデックスを作成しますが、外部キー関係の参照側には作成しません。

Pg が暗黙的なインデックスを作成すると、および/またはシステム ログNOTICEで確認できる レベルのメッセージが発行されるため、それがいつ発生したかを確認できます。自動的に作成されたインデックスは、テーブルの出力psqlにも表示されます。\d

ユニークインデックスに関するドキュメント言う:

PostgreSQL は、一意性を強化するために、一意制約と主キー制約ごとにインデックスを自動的に作成します。したがって、主キー列に対して明示的にインデックスを作成する必要はありません。

そして、制約言う:

参照テーブルからの行の DELETE または参照列の UPDATE では、参照テーブルをスキャンして古い値に一致する行を探す必要があるため、参照列にインデックスを付けることが推奨されます。これは必ずしも必要なわけではなく、インデックス付けの方法には多くの選択肢があるため、外部キー制約を宣言しても参照列にインデックスが自動的に作成されるわけではありません。

したがって、必要な場合は、外部キーのインデックスを自分で作成する必要があります。

M 対 N テーブルで 2 つの FK を PK として使用するなど、主外部キーを使用する場合は、PK にインデックスが作成され、追加のインデックスを作成する必要はおそらくないことに注意してください。

通常は、参照側の外部キー列に(または参照側の外部キー列を含めて)インデックスを作成することをお勧めしますが、必須ではありません。追加するインデックスごとに DML 操作がわずかに遅くなるため、、またはINSERTごとにパフォーマンス コストがかかります。インデックスがめったに使用されない場合は、作成する価値がない可能性があります。UPDATEDELETE

おすすめ記事