53 lines
1.9 KiB
Markdown
53 lines
1.9 KiB
Markdown
# 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
|
|
- 
|
|
### 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
|
|
- 
|
|
|
|
### 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
|
|
- 
|
|
|
|
#### 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)$
|