Was ist Index (Datenbankindex)?

Datenstruktur in einer Datenbank, mit der sich anhand eines Werts in einer bestimmten Spalte einer Tabelle schnell die Position der Zeilen mit diesem Wert finden lässt. Häufig werden B+-Bäume verwendet. Sie beschleunigt Suchen, muss aber bei jedem Einfügen, Ändern oder Löschen einer Zeile gepflegt werden und belegt Speicherplatz.

Japanische Bezeichnung: インデックス

„Index (Datenbankindex)“ kommt in 3 Übungsfragen aus 1 Themen vor, z. B. Grundlagen der Datenbanken.

Fachgebiet: Grundlagen der Datenbanken

Funktionsweise eines B+-Baum-Index

Indizes relationaler Datenbanken verwenden häufig B+-Bäume. Ein B+-Baum ist eine Baumstruktur mit vielen Verzweigungen je Knoten und gleich vielen Ebenen von der Wurzel bis zu jedem Blatt; die Blätter enthalten Spaltenwerte und Zeilenpositionen in Wertereihenfolge und sind der Reihe nach miteinander verkettet. Verzweigt jeder Knoten 100-fach, können drei Ebenen 1 Million Einträge unterscheiden, sodass man selbst in einer Tabelle mit 1 Million Zeilen mit wenigen Lesezugriffen zur gesuchten Zeile gelangt. Da die Blätter in Wertereihenfolge verkettet sind, lässt sich der Index nicht nur für Suchen mit =, sondern auch für Bereichssuchen wie BETWEEN und für die Sortierung mit ORDER BY nutzen.

Wann ein Index hilft und wann nicht

Ein Index wirkt bei einer Spalte mit hoher Selektivität, bei der eine Bedingung die Zeilen auf einen kleinen Bruchteil des Ganzen eingrenzt. Eine Spalte mit lauter verschiedenen Werten wie eine Mitgliedsnummer ist ideal; bei einer Spalte mit nur zwei Werten wie dem Geschlecht trifft dagegen etwa die Hälfte der Zeilen zu, und ein Full Table Scan, der die Tabelle der Reihe nach liest, ist oft schneller als der zeilenweise Abruf über den Index. Für Bedingungen, die eine Funktion auf die Spalte anwenden, oder für Suffixsuchen wie LIKE '%mann' ist ein gewöhnlicher Index unter Umständen nicht nutzbar.

Der Preis beim Schreiben

Ein Index ist eine Datenstruktur, die getrennt von der Tabelle gepflegt wird. Bei jedem Einfügen, Ändern oder Löschen einer Zeile müssen alle betroffenen Indizes mit aktualisiert werden; je mehr Indizes es gibt, desto langsamer wird das Schreiben und desto mehr Speicher wird belegt. Grundsätzlich legt man daher Indizes auf Spalten an, die häufig als Such- oder Join-Bedingung dienen, und löscht ungenutzte Indizes. Für Primärschlüssel- und UNIQUE-Spalten legen viele DBMS automatisch einen Index an.

Jetzt üben: Fragen zu Index (Datenbankindex)

Auf der Spalte MitgliedsNr einer Mitgliedertabelle mit 1 Million Zeilen wurde ein B+-Baum-Index angelegt. Welche Kombination aus allgemein zu erwartender Wirkung und deren Preis ist richtig?

  1. ASuchen wie WHERE MitgliedsNr = 12345 werden schneller, doch Schreibvorgänge werden langsamer, weil bei jedem Einfügen oder Ändern einer Zeile auch der Index aktualisiert werden muss
  2. BSuchen auf allen Spalten werden schneller, ohne jeden Preis
  3. CDie Zeilen der Tabelle werden nach MitgliedsNr sortiert, sodass jede Suche schneller wird, und der Speicherbedarf halbiert sich
Antwort und Erläuterung anzeigen

Antwort: A. Suchen wie WHERE MitgliedsNr = 12345 werden schneller, doch Schreibvorgänge werden langsamer, weil bei jedem Einfügen oder Ändern einer Zeile auch der Index aktualisiert werden muss

Ein Index ist eine Datenstruktur, mit der sich anhand eines Werts in einer bestimmten Spalte schnell die Position der Zeilen mit diesem Wert finden lässt; relationale Datenbanken verwenden häufig B+-Bäume. Ohne Index müsste man, um die Zeile WHERE MitgliedsNr = 12345 zu finden, 1 Million Zeilen der Reihe nach durchsuchen (Full Table Scan), mit einem B+-Baum findet man sie dagegen, indem man nur wenige Ebenen von der Wurzel bis zu einem Blatt durchläuft. Verzweigt jeder Knoten zum Beispiel 100-fach, gilt 100 × 100 × 100 = 1 Million, es genügen also etwa drei Ebenen. Da die Blätter eines B+-Baums in Wertereihenfolge verkettet sind, lässt sich der Index auch für Bereichssuchen wie BETWEEN und für die Sortierung mit ORDER BY nutzen. Andererseits muss der Index bei jedem Einfügen, Ändern oder Löschen einer Zeile mit aktualisiert werden, sodass Schreibvorgänge langsamer werden, und der Index braucht Speicherplatz. Suchen auf Spalten ohne Index werden nicht schneller.

Für eine Mitgliedertabelle mit 1 Million Zeilen wird erwogen, auf den Spalten MitgliedsNr (alle verschieden), Präfektur (47 Werte) und Geschlecht (2 Werte, etwa je zur Hälfte) jeweils einen B+-Baum-Index anzulegen. Bei welcher Spalte ist ein Index bei einer Suche, die in der WHERE-Klausel einen Wert für eine Spalte angibt, voraussichtlich am wenigsten wirksam?

  1. APräfektur
  2. BGeschlecht
  3. CMitgliedsNr
Antwort und Erläuterung anzeigen

Antwort: B. Geschlecht

Ein Index ist wirksam, wenn die Zeilen, die die Bedingung erfüllen, auf einen kleinen Bruchteil des Ganzen eingegrenzt werden. Jede MitgliedsNr ist verschieden, also passt nur eine Zeile, und der Index führt direkt zu ihr. Präfektur hat 47 Werte; bei gleichmäßiger Verteilung grenzt ein Wert die Suche auf etwa 1 Million ÷ 47 ≈ 21.000 Zeilen ein (etwa 2 % des Ganzen). Geschlecht hat zwei Werte mit etwa je der Hälfte, beide Werte treffen also auf etwa 500.000 Zeilen zu (etwa 50 %). So viele Zeilen einzeln über einen Index abzurufen ist oft langsamer als ein Full Table Scan, der die Tabelle von Anfang bis Ende liest; der Optimierer des DBMS wählt daher unter Umständen einen Ausführungsplan ohne den Index. Je mehr verschiedene Werte eine Spalte hat und je stärker eine Bedingung auf ihr die Zeilen eingrenzt (je höher die Selektivität), desto wirksamer ist ein Index darauf.

Häufige Fragen

Sollte man auf jeder Spalte einen Index anlegen?

Nein. Je mehr Indizes es gibt, desto mehr Pflegeaufwand entsteht bei jedem Einfügen oder Ändern einer Zeile, und desto mehr Speicher wird belegt. Indizes legt man auf Spalten an, die häufig als Such- oder Join-Bedingung dienen und die Zeilen ausreichend eingrenzen.

Warum wird ein angelegter Index nicht verwendet?

Mögliche Gründe sind, dass der Optimierer so viele passende Zeilen erwartet, dass ein Full Table Scan schneller ist, oder eine Bedingung, die die Sortierung des Index nicht nutzen kann, etwa eine Funktion auf der Spalte oder eine Suffixsuche mit LIKE.

„Index (Datenbankindex)“ in den Erläuterungen

Fragen mit „Index (Datenbankindex)“ (3)

  1. Auf der Spalte MitgliedsNr einer Mitgliedertabelle mit 1 Million Zeilen wurde ein B+-Baum-Index angelegt. Welche Kombination aus allgemein zu erwartender Wirkung und deren Preis ist richtig?
  2. Für eine Mitgliedertabelle mit 1 Million Zeilen wird erwogen, auf den Spalten MitgliedsNr (alle verschieden), Präfektur (47 Werte) und Geschlecht (2 Werte, etwa je zur Hälfte) jeweils einen B+-Baum-Index anzulegen. Bei welcher Spalte ist ein Index bei einer Suche, die in der WHERE-Klausel einen Wert für eine Spalte angibt, voraussichtlich am wenigsten wirksam?
  3. Welche Aussage beschreibt einen View in einer relationalen Datenbank richtig?

Verwandte Begriffe

View (Datenbank-View) ACID-Eigenschaften Dritte Normalform (3NF) E-R-Diagramm (Entity-Relationship-Diagramm) Fremdschlüssel Isolationslevel Normalisierung NoSQL Primärschlüssel Relationale Datenbank

Zur Glossarübersicht