MS SQL-Server > Datenbank-Funktionen > Indizierung
Was ist ein nicht-gruppierter (nonclustered) Index?
Bei einem nicht-gruppierten (nonclustered) Index handelt es sich um eine separat zu den Daten gespeicherte Suchstruktur (im Gegensatz zu einem gruppierten (clustered) Index bei dem die Daten geordnet in einer Suchstruktur physisch auf dem Datensträger gespeichert sind).
Der nicht-gruppierte (nonclustered) Index wird ebenfalls (wie ein gruppierter (clustered) Index) als B*-Baum-Struktur sortiert gemäß der Schlüsselspalten gespeichert. Auf Blattebene befindet sich aber ein sogenannter Zeilenlokator (row locator) der auf den eigentlichen Datensatz verweist (und evtl. die Daten sogenannter enthaltener Spalten).
Der Aufbau des Zeilenlokators hängt von der physischen Speicherung der Tabelle ab:
- Heap: In diesem Fall ist der Zeilenlokator eine sogenannte Zeilen-ID (row ID), die aus Datei nummer (file id, 2 Byte) / Seitennummer (page id, 4 Byte) und position des Datensatzes auf der Seite (slot, 2 Byte) besteht
- Gruppierter Index: In diesem Fall besteht der Zeilenlokator aus den Indexschlüsselspalten des gruppierten Index
Nicht-gruppierte (nonclustered) Indizes können mittlerweile wie
gruppiertere (clustered) Indizes aufgebaut werden - da auch bei einem
nicht-gruppierten (nonclustered) Index zusätzliche (enthaltene)
Spalten definiert werden können, nach denen der Index nicht sortiert
wird, die aber auf Blattebene des Index abgelegt werden - damit sind bei
Erreichen der Blattebene diese Daten ebenfalls vorhanden (und müssen
nicht separat über einen Zeilenlokator geladen werden). Dies ist also
relevant für Abfragen, bei denen nur Spalten (inkl. enthaltener Spalten)
des Index selektiert werden (die Abfrage also durch den Index
vollständig "abgedeckt" wird).