PostgreSQL opretter automatisk indekser på primære nøgler og unikke begrænsninger, men ikke på referencesiden af udenlandske nøglerelationer.
Når Pg opretter et implicit indeks, vil det udsende en NOTICE
besked på niveau, som du kan se i psql
og/eller systemloggene, så du kan se, hvornår det sker. Automatisk oprettede indekser er synlige i \d
output for en tabel også.
Dokumentationen om unikke indekser siger:
PostgreSQL opretter automatisk et indeks for hver unik begrænsning og primær nøgle begrænsning for at håndhæve unikhed. Det er således ikke nødvendigt at oprette et indeks eksplicit for primære nøglekolonner.
og dokumentationen om begrænsninger siger:
Da en SLETT af en række fra den refererede tabel eller en OPDATERING af den refererede kolonne vil kræve en scanning af referencetabellen for rækker, der matcher den gamle værdi, er det ofte en god ide at indeksere referencekolonner. Fordi dette ikke altid er nødvendigt, og der er mange valgmuligheder for, hvordan man indekserer, opretter erklæringen om en fremmed nøglebegrænsning ikke automatisk et indeks på referencekolonnerne.
Derfor skal du selv oprette indekser på fremmednøgler, hvis du vil have dem.
Bemærk, at hvis du bruger primære fremmednøgler, som 2 FK'er som en PK i en M-til-N-tabel, vil du have et indeks på PK'en og behøver sandsynligvis ikke at oprette ekstra indekser.
Selvom det normalt er en god idé at oprette et indeks på (eller inkludere) dine udenlandske nøglekolonner på referencesiden, er det ikke påkrævet. Hvert indeks, du tilføjer, sænker DML-operationer en smule, så du betaler en ydeevne for hver INSERT
, UPDATE
eller DELETE
. Hvis indekset sjældent bruges, er det måske ikke værd at have.