Klastrujący i nieklastrujący indeks [clustered & non clustered]

Indeks klastrujący (clustered)

Stworzenie takiego indeksu powoduje zmianę kolejności przechowywania elementów oryginalnej tabeli tak, żeby była posortowana po kluczu indeksu. Czyli powiedzmy mając tabelę „Pracownicy” i nakładając na nią indeks klastrujący oparty o kolumnę „zarobki” powodujemy przesortowanie wszystkich elementów tabeli według klucza „zarobki”:

IdName
1John
2Patrick
3Anthony

Dodając indeks klastrujący na kolumnie Name (sortowanie rosnące) dostaniemy:

IdName
3Anthony
1John
2Patrick

Z powyższego wynika, że możemy mieć tylko jeden indeks klastrujący.

Indeks nieklastrujący (non clustered)

Jest to indeks budowany obok oryginalnej tabeli. Zawiera on posortowane elementy klucza i referencje do oryginalnych wierszy tabeli. Przykładowo chcąc utworzyć nieklastrujący indeks dla kolumny Name:

IdName
1John
2Patrick
3Anthony
Tabela
RefToTableName
RefToAnthonyAnthony
RefToJohnJohn
RefToPatrickPatrick
Nieklastrujący indeks (Name)

Z powyższego wynika, że indeksów nieklastrujących możemy mieć nieskończoną ilość.

Porównanie

Indeks KlastrującyIndeks Nieklastrujący
Szybszy odczyt i zapisWolniejszy odczyt i zapis – zarówno przy zapisie jak i przy odczycie trzeba się poruszać pomiędzy dwoma strukturami (właściwą tabelą i indeksem)
Mniejsza ilość zajętej pamięciWiększa ilość zajętej pamięci – dla każdego indeksu potrzebna jest dodatkowa pamięć
Możliwość tylko jednego indeksu (operujemy na danych tabeli)Możliwość nieograniczonej ilości indeksów