Clustered och non-clustered index

För att få ner tiden på SQL-frågor mot stora tabeller så krävs index på rätt kolumner. Men vad är skillnaden mellan ett clustered och ett non-clustered index?

Clustered
  • Alla rader i tabellen sorteras fysiskt efter de kolumner som ingår i indexet.
  • Det kan bara finnas ett clustered index per tabell.
  • En tabell sorteras enbart fysiskt när den innehåller ett clustered index.
  • En tabell som innehåller ett clustered index kallas för “clustered table”.
Non-clustered
  • Ett non-clustered index har en struktur som skiljer sig från tabellens och innehåller kolumnerna som ingår i indexet och en pekare till den rad som är aktuell.
  • En tabell som inte innehåller ett clustered index kallas för “heap” och sorterar inte sina rader fysiskt.
  • En pekare i ett non-clustered index kallas för “row locator”. En row locator ser olika ut beroende på ifall tabellen innehåller ett clustered eller non-clustered index. Är det en heap table så pekar row locatorn på raden. Ifall det är en clustred table så pekar row locatorn på key:n i clustred index.