外部キーのインデックスが必要


30

私はインデックス、プライマリキー、外部キーに苦労しています...そしてそれらすべてを持つ必要があります。

2つのテーブルがある場合、両方ともプライマリキーとして整数を持ちます。
最初のテーブルは、FKを介して2番目のテーブルの主キーを参照します。

  • 両方のテーブルで、ID列に主キーインデックスがあります
  • table1.ref_field2番目のテーブルのPKを参照するFK制約を作成しました(table2.id
  • にインデックスを追加しました table1.ref_field

これは、これらのインデックス、プライマリキー、外部キーを整理する最良の方法ですか?

回答:


30

あなたのデザインは良いです。パフォーマンスに問題がある場合(設計時にはわかりません)、table2.id列と同じ順序(ASC)で、table1.ref_field列にインデックスを作成する必要があります。これにより、テーブル/列への結合のパフォーマンスが向上します。インデックスの維持にはオーバーヘッドがあるため、そのコストとパフォーマンスの向上のメリットを比較検討します。

PostgreSQLは、残念ながら、他の列を参照する外部キー列にそのようなインデックスを自動的に作成しません。そのため、自分で作成する必要があります。

同じトピックに関するStackOverflowの質問を次に示します。

外部キーと主キーのPostgresとインデックス

このようなインデックスを追加することでメリットが得られる場所を判断するのに役立つクエリを次に示します。

Postgresql:外部キーのインデックス


必ずしも不幸なわけでDELETEはありません- 参照されたテーブルからではない場合、未使用のインデックスを維持することを避けて、多くのI / OとCPUを節約できます。デフォルトで作成されるべきだと思いますが、作成を抑制するオプションがあるだけです。
クレイグリンガー

Craig Ringer DELETEがそれに影響を与える可能性があるだけでなく、partentから子テーブルを選択すると、パフォーマンスの問題も発生します。Oracleのこのドキュメントでは、asktom.oracle.com
pls
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.