Det finns en viss brist på precision i definitionerna av primära och sekundära index.
Använder två populära universitetstexter som referens:
Fundamentals of Database Systems, Elmasri &Navathe definierar dem som:
Databassystem:The Complete Book, Garcia-Molina et. al definierar dem som:
Vissa egenskaper som gäller för båda definitionerna ovan:
- primära nycklar kan vara primära index
- det kan vara högst 1 primärt index per tabell
- primära index bestämmer unikt var en post förvaras i fysisk lagring.
- Alla andra index klassificeras som sekundära.
Men om placeringen av poster i datafilen inte bestäms av något fält, kan ett primärt index inte konstrueras.
För sorterade filer är det alltså meningsfullt att prata om det primära indexet (vilket skulle vara listan över fält som sorteringen är baserad på). Jag kan inte hitta andra exempel på fysiska filstrukturer där ett primärt index kan konstrueras.
Postgresql använder en heapstruktur för den fysiska lagringen för poster. Högar sorteras inte (ordleksvarning:de är sorterade). Därför är även de primära nycklarna implementerade med hjälp av sekundära index, och som sådana är alla index i Postgresql sekundära.
Andra RDBMS-system gör implementera lagringsformat som stöder primära index:
- Mysqls InnoDB kallar detta klustrade index
- MSSQL hänvisar också till primärindexet som en klustrade index
- Oracle kallar detta indexorganiserade tabeller
Språket i Postgres-dokumentationen är oprecis.
Detta är sant.
Det är inte därför alla index är sekundära i Postgresql. Primära index kan också lagras separat från tabellens huvuddataområde.