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 |
