Strukturen nicht gruppierter Indizes

Nicht gruppierte Indizes weisen dieselbe B-Baumstruktur auf wie gruppierte Indizes, mit Ausnahme der beiden folgenden signifikanten Unterschiede:

  • Die Datenzeilen der zugrunde liegenden Tabelle werden nicht auf der Grundlage ihrer nicht gruppierten Schlüssel sortiert und gespeichert.

  • Die Blattebene eines nicht gruppierten Indexes besteht aus Indexseiten, nicht aus Datenseiten.

Nicht gruppierte Indizes können für eine Tabelle oder eine Sicht mit einem gruppierten Index oder einem Heap definiert werden. Jede Zeile eines nicht gruppierten Indexes enthält einen nicht gruppierten Schlüsselwert und einen Zeilenlokator. Dieser Zeilenlokator zeigt auf die Datenzeile des gruppierten Indexes oder des Heaps mit dem Schlüsselwert.

Zeilenlokatoren in nicht gruppierten Indexzeilen bestehen entweder aus Zeigern, die auf jeweils eine Zeile zeigen, oder aus einem Schlüssel eines gruppierten Indexes für eine Zeile, wie im Folgenden erläutert:

  • Wenn es sich bei der Tabelle um einen Heap handelt (d. h. sie hat keinen gruppierten Index), entspricht der Zeilenlokator einem Zeiger auf die Zeile. Der Zeiger setzt sich aus dem Dateibezeichner (ID), der Seitennummer und der Nummer der Zeile auf der Seite zusammen. Der ganze Zeiger wird als Zeilen-ID (RID) bezeichnet.

  • Wenn die Tabelle einen gruppierten Index besitzt oder der Index für eine indizierte Sicht erstellt wurde, ist der Zeilenlokator der Schlüssel des gruppierten Indexes für die Zeile. Wenn der gruppierte Index kein eindeutiger Index ist, fügt SQL Server zu den Schlüsseln, die mehrfach vorkommen, einen intern generierten Wert, uniqueifier, hinzu, damit die Schlüssel eindeutig werden. Dieser aus vier Bytes bestehende Wert ist für Benutzer nicht sichtbar. Er wird nur hinzugefügt, wenn der gruppierte Schlüssel eindeutig sein muss, um in nicht gruppierten Indizes verwendet werden zu können. SQL Server ruft die Datenzeilen ab, indem der gruppierte Index mithilfe des Schlüssels des gruppierten Indexes durchsucht wird, der in der Blattzeile des nicht gruppierten Indexes gespeichert ist.

Nicht gruppierte Indizes besitzen eine Zeile index_id >0 in sys.partitions für jede von dem Index verwendete Partition. Standardmäßig besitzen nicht gruppierte Indizes nur eine Partition. Wenn ein nicht gruppierter Index mehrere Partitionen besitzt, weist jede Partition eine B-Baumstruktur auf, die die Indexzeilen der entsprechenden Partition enthält. Wenn ein nicht gruppierter Index beispielsweise vier Partitionen besitzt, gibt es vier B-Baumstrukturen – jeweils eine in jeder Partition.

Abhängig von den Datentypen des nicht gruppierten Indexes erhält jede Struktur mindestens eine Zuordnungseinheit, in der die Daten einer bestimmten Partition gespeichert und verwaltet werden. Jeder nicht gruppierte Index besitzt also eine IN_ROW_DATA-Zuordnungseinheit pro Partition, die die B-Baumstrukturseiten des Indexes speichert. Außerdem besitzt der nicht gruppierte Index eine LOB_DATA-Zuordnungseinheit, wenn er LOB-Spalten (Large Object) enthält. Endlich besitzt er eine ROW_OVERFLOW_DATA-Zuordnungseinheit pro Partition, wenn er Spalten variabler Länge enthält, die das Zeilengrößenlimit von 8.060 Byte überschreiten. Weitere Informationen zu Zuordnungseinheiten finden Sie unter Organisationsstruktur von Tabellen und Indizes. Die Seitenauflistungen für den B-Baum sind durch root_page-Zeiger in der sys.system_internals_allocation_units-Systemsicht verankert.

Wichtiger HinweisWichtig

Die Systemsicht sys.system_internals_allocation_units ist nur für die interne Verwendung durch Microsoft SQL Server reserviert. Zukünftige Kompatibilität wird nicht sichergestellt.

Die folgende Abbildung veranschaulicht die Struktur eines gruppierten Indexes einer einzigen Partition.

Ebenen eines nicht gruppierten Index

Indizes mit eingeschlossenen Spalten

Die Funktionalität nicht gruppierter Indizes kann erweitert werden, indem Sie der Blattebene des Indexes eingeschlossene Spalten, so genannte Nichtschlüsselspalten, hinzufügen. Die Schlüsselspalten werden auf allen Ebenen des Indexes gespeichert, die Nichtschlüsselspalten nur auf der Blattebene. Weitere Informationen finden Sie unter Index mit eingeschlossenen Spalten.