Gruppierte Indexstrukturen
In SQL Server sind Indizes in Form von B-Strukturen aufgebaut. Jede Seite in der B-Struktur eines Indexes wird als Indexknoten bezeichnet. Der oberste Knoten der B-Struktur wird als Stammknoten bezeichnet. Die Knoten auf der untersten Ebene des Indexes werden als Blattknoten bezeichnet. Alle anderen Indexebenen zwischen dem Stamm- und den Blattknoten werden zusammenfassend als Zwischenebenen bezeichnet. In einem gruppierten Index enthalten die Blattknoten die Datenseiten der zugrunde liegenden Tabelle. Die Stamm- und Zwischenebenenknoten enthalten Indexseiten, in denen Indexzeilen enthalten sind. Jede Indexzeile enthält einen Schlüsselwert und einen Zeiger auf eine Seite einer Zwischenebene in der B-Struktur oder auf eine Datenzeile in der Blattebene des Indexes. Die Seiten auf jeder Ebene des Indexes sind durch eine doppelt verknüpfte Liste miteinander verknüpft.
Gruppierte Indizes besitzen eine Zeile in sys.partitions, wobei index_id = 1 für jede Partition ist, die vom Index verwendet wird. Standardmäßig besitzt ein gruppierter Index eine Partition. Wenn ein gruppierter Index über mehrere Partitionen verfügt, besitzt jede Partition eine B-Struktur, die die Daten für diese bestimmte Partition enthält. Wenn ein gruppierter Index z. B. vier Partitionen besitzt, sind vier B-Strukturen vorhanden, eine in jeder Partition.
Abhängig von den Datentypen im gruppierten Index weist jede gruppierte Indexstruktur eine oder mehrere Zuordnungseinheiten auf, in denen die Daten für eine bestimmte Partition gespeichert und verwaltet werden. Jeder gruppierte Index weist mindestens eine IN_ROW_DATA-Zuordnungseinheit pro Partition auf. Der gruppierte Index besitzt außerdem eine LOB_DATA-Zuordnungseinheit pro Partition, wenn LOB-Spalten (Large Object) vorhanden sind. Außerdem ist eine ROW_OVERFLOW_DATA-Zuordnungseinheit pro Partition vorhanden, wenn der Index Spalten variabler Länge aufweist, die die Zeilengrößenbegrenzung von 8.060 Byte übersteigen. Weitere Informationen zu Zuordnungseinheiten finden Sie unter Organisationsstruktur von Tabellen und Indizes.
Die Seiten in der Datenkette und die darin enthaltenen Zeilen werden anhand des Werts des Schlüssels des gruppierten Indexes angeordnet. Jede Einfügung wird an der Position vorgenommen, die der Schlüsselwert der eingefügten Zeile in der Reihenfolge vorhandener Zeilen einnimmt. Die Seitenauflistungen für die B-Struktur werden mit Seitenzeigern in der sys.system_internals_allocation_units-Systemsicht verankert.
Wichtig |
---|
Die Systemsicht sys.system_internals_allocation_units ist nur für die interne Verwendung durch MicrosoftSQL Server reserviert. Zukünftige Kompatibilität wird nicht sichergestellt. |
Für einen gruppierten Index verweist die root_page-Spalte in sys.system_internals_allocation_units auf die oberste Ebene des gruppierten Indexes für eine bestimmte Partition. SQL Server durchsucht den Index in absteigender Reihenfolge nach der Zeile, die dem Schlüssel eines gruppierten Indexes entspricht. Um einen Bereich von Schlüsselwerten zu finden, bewegt sich SQL Server durch den Index, um den Anfangsschlüsselwert des Bereichs zu finden. Anschließend werden die Datenseiten mithilfe der Zeiger auf vorherige und folgende Seiten gescannt. Um die erste Seite in der Kette aus Datenseiten zu finden, beginnt SQL Server beim Stammknoten und folgt den Zeigern ganz links im Index.
Die folgende Abbildung veranschaulicht die Struktur eines gruppierten Indexes in einer einzelnen Partition.