PostgreSQLは、主キーと一意の制約にインデックスを自動的に作成しますが、外部キー関係の参照側には作成しません。
Pgが暗黙的なインデックスを作成すると、NOTICE
が発行されます。 psql
で確認できるレベルのメッセージ および/またはシステムログ。それがいつ発生するかを確認できます。自動的に作成されたインデックスは\d
に表示されます テーブルの出力も。
一意のインデックスに関するドキュメントには次のように書かれています:
PostgreSQLは、一意性を強制するために、一意性制約と主キー制約ごとにインデックスを自動的に作成します。したがって、主キー列のインデックスを明示的に作成する必要はありません。
制約に関するドキュメントには次のように書かれています:
参照されるテーブルからの行のDELETEまたは参照される列のUPDATEでは、古い値に一致する参照するテーブルの行をスキャンする必要があるため、参照する列にインデックスを付けることをお勧めします。これは常に必要なわけではなく、インデックス作成の方法については多くの選択肢があるため、外部キー制約を宣言しても、参照する列にインデックスが自動的に作成されるわけではありません。
したがって、必要に応じて、外部キーに自分でインデックスを作成する必要があります。
M-to-NテーブルのPKとして2FKのような主外部キーを使用する場合は、PKにインデックスがあり、おそらく追加のインデックスを作成する必要はありません。
通常、参照側の外部キー列にインデックスを作成する(または含める)ことをお勧めしますが、必須ではありません。追加するインデックスごとにDML操作がわずかに遅くなるため、INSERT
ごとにパフォーマンスコストを支払うことになります。 、UPDATE
またはDELETE
。インデックスがめったに使用されない場合は、持つ価値がない可能性があります。