Hallo allesamt,
bei meinem Datenmodell sehe ich zumindest in dem Admintool keine Indizes, weder für die FKs noch für die PKs.
Sollte man die zusätzlich einrichten, oder sind Indizes für PKs und vielleicht auch FKs gleich inbegriffen?
Wenn Du einen PK anlegst, wird automatisch ein Index mit dem gleichen Namen angelegt.
Foreign keys werden nicht automatisch indiziert. Es ist aber ratsam dies zu tun, um z.B. JOINs zu beschleunigen.
Wenn in der referenzierten Tabelle häufig Daten gelöscht werden, macht ein Index auf die FK Spalten (der referenzierenden Tabelle) die DELETEs schneller.
Was ist in Postgres dann üblicher, wenn man eine many to many Beziehung hat und sicherstellen möchte, dass die Kombination nur einmal vorkommen und gleichzeitig einen beschleunigten Zugriff sicherzustellen?
a) die beiden Fremdschlüssel in der Beziehungstabelle zusammen zusätzlich als PK definieren
oder
b) die Fremdschlüssel jeweils mit einem Index versehen und beide Fremdschlüssel mit einem Unique-Constraint belegen
Der primary key erzeugt ja einen unique index. Diese Index kann für Abfragen verwendet werden der beide Spalten verwendet oder für Abfrage nur mit der ersten Spalte. Wenn man auch Abfragen hat, die nur die zweite Spalte einschränken, dann braucht man dafür einen weiteren Index.
create table mapping
(
id1 int references table_1,
id2 int references table_2,
primary key (id1, id2) -- erzeugt einen unique index auf (id1, id2)
);
create index on mapping (id2); -- für z.B. WHERE id2 = 42