1. ホーム
  2. sql

[解決済み】Postgresと外部キーおよびプライマリキー上のインデックス

2022-04-18 09:56:37

質問

Postgresは自動的に外部キーと主キーにインデックスを付けるのですか? どうすれば分かりますか? テーブル上のすべてのインデックスを返すコマンドはありますか?

どのように解決するのですか?

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

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

は、その ユニークインデックスに関するドキュメント は言う。

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

のドキュメントと 制約 は言う。

参照先テーブルの行のDELETEや、ある行のUPDATEは、参照先テーブルの行を削除することになるので 参照されるカラムを探すために、参照するテーブルをスキャンする必要があります。 行が古い値と一致する場合、インデックスを作成した方がよい場合があります。 参照するカラム。これは常に必要というわけではなく、また、参照するカラムには インデックスを作成する方法には多くの選択肢があります。 制約が自動的に参照先のインデックスを作成するわけではありません。 カラムがあります。

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

もし、M対NテーブルのPKとして2つのFKのようなプライマリForeign-keyを使用する場合は、PKにインデックスがあり、おそらく追加のインデックスを作成する必要はないことに注意してください。

通常、参照側の外部キーカラムに(またはそれを含めて)インデックスを作成するのは良いアイデアですが、必須ではありません。インデックスを追加するたびに DML 操作が若干遅くなるため、すべての INSERT , UPDATE または DELETE . もしインデックスがほとんど使われないのであれば、持つ意味がないかもしれません。