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”:
Id | Name |
1 | John |
2 | Patrick |
3 | Anthony |
Dodając indeks klastrujący na kolumnie Name (sortowanie rosnące) dostaniemy:
Id | Name |
3 | Anthony |
1 | John |
2 | Patrick |
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:
Id | Name |
1 | John |
2 | Patrick |
3 | Anthony |
RefToTable | Name |
RefToAnthony | Anthony |
RefToJohn | John |
RefToPatrick | Patrick |
Z powyższego wynika, że indeksów nieklastrujących możemy mieć nieskończoną ilość.
Porównanie
Indeks Klastrujący | Indeks Nieklastrujący |
---|---|
Szybszy odczyt i zapis | Wolniejszy 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ęci | Wię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 |