# Interne Datenorganisation ## Index und B-Baum ### Dünner Index - Indexeinträge für jede Page - Indizierte Daten müssen innerhalb der Page sortiert sein und einmalig vorkommen - Hat weniger Datensätze als eigentliche Tabelle - Enthält nur die Page-Nummer und den Schlüsselwert - Meistens verwendet für Primärschlüssel - ![image_895.png](image_895.png) ### Dichter Index - Indexeinträge für jeden Record - Indizierte Daten müssen nicht sortiert sein - Indexeinträge können mehrfach vorkommen - Hat gleiche Anzahl Datensätze wie die eigentliche Tabelle - Enthält Page-Nummer, Record-Nummer und den Schlüsselwert - ![image_896.png](image_896.png) ### Mehrstufiger Index (Baum) - Indexeinträge sind in einem Baum organisiert - Jeder Knoten enthält Schlüsselwerte und Zeiger auf die Kinderknoten ### B-Baum - Balancierter mehrstufiger Index - ![image_897.png](image_897.png) #### Suchen in B-Bäumen - Suche beginnt an der Wurzel - Ist x im Knoten enthalten? - Ja: Suche beendet - Nein: Gehe zum Kindknoten, dessen Schlüsselwert am nächsten an x liegt - Ist Knoten Blattknoten? - Ja: Suche erfolglos beendet - Nein: Wiederhole Suche im Kindknoten - Zwischen welchen Schlüsselwerten liegt x? - Gehe zum jeweiligen Kindknoten (> → rechts / < → links) #### Einfügen in B-Bäume - Suche nach der Position, an der x eingefügt werden soll - Ist der Knoten voll? (Anzahl der Schlüsselwerte = 2m) - Ja: Knoten teilen - Mittleren Schlüsselwert in den Elternknoten einfügen - Falls Elternknoten voll wiederhole Teilung nach oben - Falls Elternknoten Wurzel ist, wird eine neue Wurzel erstellt - B-Baum wächst um eine Stufe - Nein: Einfügen des Wertes in den Knoten ### Variante B+ Baum - Keine Daten in den Knoten - Nur Schlüsselwerte und Zeiger auf die Kinderknoten - Daten befinden sich in den Blattknoten - Suche, Einfügen, Löschen immer $O(log n)$