WikiDer > Index (Datenbank)
EIN Datenbankindex ist eine Struktur, deren Zweck es ist, Auswahlen und selektive Operationen auf einem Datenbank beschleunigen.
Ein Index reduziert die Anzahl der erforderlichen Vergleiche, um einen oder mehrere Datenbankdatensätze zu finden. Dies verhindert ein sogenanntes vollständiger Tabellenscan muss durchgeführt werden, indem alle Datensätze in der Tabelle sequentiell durchlaufen werden.
Ein Datenbankindex ist funktional (aber nicht strukturell) einem Index in einem Buch ähnlich; Schließlich ist es bei der Verwendung eines Indexes in einem Buch nicht notwendig, alle Seiten durchzulesen, um ein Thema zu finden.
Problem
Datenbanken müssen viele Daten enthalten und von vielen Benutzern und Prozessen gleichzeitig genutzt werden können. Die Verarbeitungsgeschwindigkeit eines solchen Systems ist sehr wichtig. Auswahlen in nicht indizierten Tabellen würden einen vollständigen Tabellenscan pro Auswahl oder Operation auslösen. Das kostet pro Operation unnötig viel Zeit. Beispielsweise wird die Geschwindigkeit des Systems stark reduziert, wenn mehrere Benutzer gleichzeitig eine Tabelle verwenden und auch die Anzahl der Datensätze in der Tabelle steigt.
Manchmal ist es auch erforderlich, dass die Werte in einer Spalte eindeutig sind. Bei jeder Hinzufügung oder Änderung in der entsprechenden Spalte muss die Spalte durchsucht werden, um zu überprüfen, ob der Wert nicht bereits vorhanden ist. Dies würde ohne Index bedeuten, als a vollständiger Tabellenscan in jeder dieser Operationen benötigt.
EIN vollständiger Tabellenscan ist für kleine Tabellen mit einzelnen Datensätzen kein Problem.
Operation
Ein Index enthält die Werte oder abgeleiteten Werte (wie Hashes) einer oder mehrerer Spalten und einen Verweis auf Datensätze oder die Datensätze selbst. Letzteres ist häufig bei sogenannten Clustered-Indizes: Ein Index, bei dem eine Spalte die physische Reihenfolge der Datensätze auf dem Speichermedium bestimmt. Nächster Clustered-Indizes gibt es auch nicht gruppierte Indizes. Dies sind alles Indizes, die die Reihenfolge der Datensätze beim Speichern nicht bestimmen.
Ein Index (bei a Baumstruktur: auf Blattebene) kann auch Werte aus einem Datensatz enthalten. Diese sind abdeckende Indizes. Der Datensatz existiert auch getrennt vom Index, aber der Index enthält auch Kopien von Spalten der Tabelle. Dadurch muss der Datensatz nicht mehr durchsucht werden, wenn er über die Deckungsindex gefunden wurde und die angeforderten Werte bereits im Index enthalten sind. Dieser Index erhöht die Geschwindigkeit stärker als nicht deckende Indizes (bei ordnungsgemäßer Konfiguration), beeinflusst jedoch die Aktualisierung der Daten in der Datenbanktabelle. Schließlich müssen auch die Werte im Index aktualisiert werden.
Die entsprechenden Datensätze können anhand der Werte gefunden werden, aus denen der Index besteht.
Mehrspaltige Indizes können in der Regel nur (oder nur effizient) genutzt werden, wenn alle oder die ersten Spalten dieses Indexes durchsucht werden. Die Reihenfolge, in der die Spalten in den Index aufgenommen werden, ist daher wichtig.
Struktur
Theoretisch gibt es viele Möglichkeiten, einen Index zu erstellen. In der Praxis wird meist eine Baumstruktur (zum Beispiel A ausgewogener Baum oder B-Baum) oder die Verwendung einer Hash-Tabelle oder einer Kombination davon. Die unterschiedlichen Strukturen haben jeweils ihre eigenen Vor- und Nachteile. Der richtige Indextyp und das genaue Format des Index hängen von mehreren Faktoren ab, beispielsweise von den in der Tabelle gespeicherten Daten, dem Datentyp, der Verwendung des Index und der im System verfügbaren Speicherkapazität.
In den meisten Fällen werden Baumstrukturen als Index verwendet. Die größten Vorteile davon sind:
- schnelle Suche
- Änderungen an der Tabelle erfordern in der Regel keine strukturelle Aktualisierung des Index (erfordert das Erstellen, Löschen, Aufteilen oder Zusammenführen von Knoten im Baum)
- der Index muss nicht unbedingt komplett in den Speicher geladen werden, sondern kann in mehreren Leseaktionen Stück für Stück gelesen werden, wobei nur die relevanten Teile gelesen werden. Das ist gerade bei vielen Schallplatten ein großer Vorteil. Bei einer großen Anzahl von Datensätzen wird auch der Index sehr groß. Bei den heutigen CPU-Geschwindigkeiten bestimmt in der Regel die Anzahl der Lesevorgänge vom Speichermedium die Geschwindigkeit des Index.
Hash-Tabellen sind sehr schnell und können in einigen Fällen schneller als ein Baum sein, haben jedoch den Nachteil, dass sie viel zusätzlichen Speicher verbrauchen.
Nachteile
Der Nachteil von Indizes besteht darin, dass sie Arbeitsspeicher und Festplattenspeicher verbrauchen. Außerdem müssen sie aktualisiert werden, wenn Datensätze in der Tabelle hinzugefügt, gelöscht und aktualisiert werden. Letzteres stellt jedoch in der Regel kein großes Problem dar, es sei denn, die Häufigkeit von Änderungsvorgängen an einer Tabelle ist sehr hoch, beispielsweise bei einer Tabelle, die die Zugriffe auf Webseiten einer stark besuchten Website verfolgt. Wenn nicht, wird es für die meisten heutigen Datenbanksysteme keinen merklichen Leistungsunterschied geben, da sie ihre Indizes aktualisieren können, wenn das System weniger stark belastet ist. Außerdem sind die notwendigen Indexänderungen oft gering, es sei denn, eine Baumstruktur muss neu angeordnet werden, was bei einer optimierten Tabelle selten vorkommt.
Beim Erstellen und Konfigurieren von Indizes muss immer ein guter Kompromiss zwischen Serverlast und Geschwindigkeitsgewinn gemacht werden.
Siehe auch
- Datenbanknormalisierung
- Hash-tabelle
- Mehrdimensionaler Index
- Relationale Datenbank
- Sortieralgorithmus
- Soundex
| Datenbanken | ||||||||
|---|---|---|---|---|---|---|---|---|
Datenbankverwaltungssystem · Datenbankmodell · Datenbanknormalisierung · referenzielle Integrität · relationale Algebra · relationale Datenbank · relationales Modell
|