Datenbankindex
aus Wikipedia, der freien Enzyklopädie
Ein Datenbankindex (kurz: Index) ist eine separate Indexstruktur in einer Datenbank, die die Suche nach bestimmten Schlüsselfeldern beschleunigt. Ein solcher Index besteht aus einer Ansammlung von Zeigern (Verweisen), die eine Ordnungsrelation auf eine oder mehrere Spalten in einer Tabelle definieren. Wird nun bei einer Abfrage eine indizierte Spalte als Suchkriterium herangezogen, sucht das Datenbanksystem die gewünschten Datensätze an Hand dieser Zeiger. In der Regel finden hier B+-Bäume Anwendung. Siehe dazu auch den Artikel Indexstruktur. Ohne Index müsste es sequentiell suchen, was selbst mit modernster Hardware und Software viel Zeit beanspruchen kann.
In SQL wird ein solcher Index mit dem Befehl create index Index_Name on Tabelle (Spalten)
definiert. In den meisten Fällen wird eine einzelne Spalte indiziert, doch auch zusammengesetzte Indizes sind in den meisten Datenbanksystemen erlaubt. Auf Primärschlüssel (SQL-Klausel primary key
im Befehl create table
) wird automatisch ein Index gelegt.
Viele DBMS erlauben auch die Definition eines clustered Index. Dieser unterscheidet sich von einem non-clustered Index dadurch, dass nicht nur die Liste der Zeiger auf die Datensätze in sortierter Form vorliegt, sondern dass das DBMS zusätzlich versucht, neu eingefügte Datensätze, welche innerhalb des Index nah beieinander liegen, auch physikalisch im Speicher nah beieinander abzulegen, was die Suche nach Werten auf dieser Spalte weiter beschleunigen kann.
Häufig reicht die Sortierung der Daten nach einem Primärindex nicht aus, so dass weitere Einstiegspunkte erforderlich werden. Wird nun für diese weiteren Erschließungen ein Gesamtinhaltsverzeichnis aufgebaut, entsteht ein Sekundärindex.
[Bearbeiten] Funktionaler Index
Unter einem Funktionalen Index (eng.: Functional Index oder Function Based Index) versteht man eine spezielle Form eines Index in einem Datenbankverwaltungssystem. Im Gegensatz zu einem normalen Index werden nicht die reinen Feldwerte (z. B.: Vorname) in den Index aufgenommen, sondern mittels Datenbankfunktionen transformierte Feldwerte (z. B.: to_upper(Vorname)).