Der er en vis mangel på præcision i definitionerne af primære og sekundære indekser.
Brug af to populære universitetstekster som reference:
Fundamentals of Database Systems, Elmasri &Navathe definerer dem som:
Database Systems:The Complete Book, Garcia-Molina et. al definerer dem som:
Nogle egenskaber, der gælder for begge definitioner ovenfor:
- primære nøgler kan være primære indekser
- der kan højst være 1 primært indeks pr. tabel
- primære indekser bestemmer entydigt, hvor en registrering opbevares i det fysiske lager.
- Alle andre indeks er klassificeret som sekundære.
Men hvis placeringen af poster i datafilen ikke er bestemt af noget felt, kan et primært indeks ikke konstrueres.
For sorterede filer giver det derfor mening at tale om det primære indeks (som ville være listen over felter, som sorteringen er baseret på). Jeg kan ikke finde andre eksempler på fysiske filstrukturer, hvor et primært indeks kan konstrueres.
Postgresql bruger en heap-struktur til den fysiske lagring af poster. Dynger er ikke sorteret (ordspil advarsel:de er sorteret sorteret). Derfor er selv de primære nøgler implementeret ved hjælp af sekundære indekser, og som sådan er alle indekser i Postgresql sekundære.
Andre RDBMS-systemer gør implementere lagringsformater, der understøtter primære indekser:
- Mysqls InnoDB kalder dette clustered index
- MSSQL henviser også til det primære indeks som en klyngede indeks
- Oracle kalder dette indeksorganiserede tabeller
Sproget i Postgres-dokumentationen er upræcist.
Det er sandt.
Det er ikke derfor, at alle indekser er sekundære i Postgresql. Primære indekser kan også gemmes separat fra tabellens hoveddataområde.