Istnieje pewien brak precyzji w definicjach indeksów pierwotnych i wtórnych.
Używając dwóch popularnych tekstów uniwersyteckich jako odniesienia:
Podstawy systemów baz danych, Elmasri i Navathe definiuje je jako:
Systemy baz danych:The Complete Book, Garcia-Molina i in. al definiuje je jako:
Niektóre właściwości, które są prawdziwe dla obu powyższych definicji:
- klucze podstawowe mogą być indeksami podstawowymi
- może być co najwyżej 1 główny indeks na tabelę
- główne indeksy jednoznacznie określają, gdzie zapis jest przechowywany w fizycznej pamięci masowej.
- Wszystkie inne indeksy są klasyfikowane jako drugorzędne.
Jeśli jednak umieszczenie rekordów w pliku danych nie jest określone przez żadne pole, nie można skonstruować indeksu podstawowego.
Dlatego w przypadku posortowanych plików sensowne jest mówienie o indeksie podstawowym (który byłby listą pól, na których opiera się sortowanie). Nie mogę znaleźć innych przykładów fizycznych struktur plików, w których można by skonstruować indeks podstawowy.
Postgresql wykorzystuje strukturę sterty do fizycznego przechowywania rekordów. Sterty nie są sortowane (uwaga kalambur:są sortowane). Dlatego nawet klucze podstawowe są implementowane przy użyciu indeksów drugorzędnych i jako takie wszystkie indeksy w Postgresql są drugorzędne.
Inne systemy RDBMS do zaimplementuj formaty przechowywania, które obsługują indeksy podstawowe:
- InnoDB Mysql nazywa ten indeks klastrowy
- MSSQL odnosi się również do indeksu primay jako indeks klastrowy
- Oracle nazywa to tabele zorganizowane według indeksu
Język w dokumentacji Postgresa jest nieprecyzyjny.
To prawda.
Nie dlatego wszystkie indeksy są w Postgresql drugorzędne. Indeksy podstawowe mogą być również przechowywane oddzielnie od głównego obszaru danych tabeli.