Bedarf an Indizes für Fremdschlüssel


30

Ich kämpfe mit Indizes, Primärschlüsseln und Fremdschlüsseln ... und der Notwendigkeit, sie alle zu haben.

Wenn ich zwei Tabellen habe, haben beide eine Ganzzahl als Primärschlüssel.
Die erste Tabelle verweist über eine FK auf den Primärschlüssel der zweiten Tabelle.

  • In beiden Tabellen gibt es einen Primärschlüsselindex für die ID-Spalte
  • Ich habe eine FK-Einschränkung für die table1.ref_fieldReferenzierung der PK der zweiten Tabelle erstellt ( table2.id)
  • und ich habe einen Index hinzugefügt table1.ref_field

Ist dies der beste Weg, um diese Indizes, Primär- und Fremdschlüssel zu organisieren?

Antworten:


30

Ihr Design ist gut. Wenn Sie ein Leistungsproblem haben (das Sie zur Entwurfszeit nicht kennen), sollten Sie einen Index für die Spalte table1.ref_field in derselben Reihenfolge (ASC) wie die Spalte table2.id erstellen. Dies verbessert die Leistung bei Verknüpfungen mit Tabellen / Spalten. Die Pflege eines Index ist mit einem Mehraufwand verbunden. Daher sollten Sie diese Kosten gegen den Nutzen einer verbesserten Leistung abwägen.

PostgreSQL erstellt solche Indizes für Fremdschlüsselspalten, die auf andere Spalten verweisen, leider nicht automatisch, so dass Sie dies selbst tun müssen.

Hier ist eine StackOverflow-Frage zum selben Thema:

Postgres und Indizes für Fremdschlüssel und Primärschlüssel

Mit der folgenden Abfrage können Sie ermitteln, wo Sie von einem solchen Index profitieren können:

Postgresql: Indizes zu Fremdschlüsseln


Es ist nicht immer unglücklich - wenn Sie nicht DELETEaus der referenzierten Tabelle stammen, können Sie eine Menge E / A und CPU sparen, ohne einen nicht verwendeten Index beizubehalten. Ich denke, es sollte standardmäßig erstellt werden, nur eine Option, um die Erstellung zu unterdrücken.
Craig Ringer

Craig Ringer Nicht nur DELETE kann sich darauf auswirken. Wenn Sie zwischen den untergeordneten Tabellen wählen, treten auch Leistungsprobleme auf. In dieser Dokumentation von Oracle wird Folgendes
777Anon
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.