sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres och index på främmande nycklar och primärnycklar

PostgreSQL skapar automatiskt index på primärnycklar och unika begränsningar, men inte på referenssidan av främmande nyckelrelationer.

När Pg skapar ett implicit index kommer det att avge en NOTICE -nivå meddelande som du kan se i psql och/eller systemloggarna, så att du kan se när det händer. Automatiskt skapade index är synliga i \d utdata för en tabell också.

Dokumentationen om unika index säger:

PostgreSQL skapar automatiskt ett index för varje unik begränsning och primärnyckelbegränsning för att framtvinga unikhet. Det är alltså inte nödvändigt att skapa ett index uttryckligen för primärnyckelkolumner.

och dokumentationen om begränsningar säger:

Eftersom en DELETE av en rad från den refererade tabellen eller en UPPDATERING av referenskolumnen kommer att kräva en genomsökning av referenstabellen för rader som matchar det gamla värdet, är det ofta en bra idé att indexera referenskolumner. Eftersom detta inte alltid behövs, och det finns många tillgängliga alternativ för hur man indexerar, skapar inte deklaration av en främmande nyckelbegränsning automatiskt ett index på referenskolumnerna.

Därför måste du själv skapa index på främmande nycklar om du vill ha dem.

Observera att om du använder primära främmande nycklar, som 2 FK:er som en PK i en M-till-N-tabell, kommer du att ha ett index på PK:n och behöver förmodligen inte skapa några extra index.

Även om det vanligtvis är en bra idé att skapa ett index på (eller inkludera) dina främmande nyckelkolumner på referenssidan, är det inte nödvändigt. Varje index du lägger till saktar ner DML-operationerna något, så du betalar en prestationskostnad för varje INSERT , UPDATE eller DELETE . Om indexet sällan används är det kanske inte värt att ha.



  1. Dialekt måste anges uttryckligen från v4.0.0

  2. Vänta Statistik och frågebutik

  3. Spårning av gilla-meddelanden på Facebook (DB Design)

  4. Kunde inte öppna databasen i läs/skrivläge