Anfang des Inhaltsbereichs

Hintergrunddokumentation Sondermerkmale von Sekundärindizes  Dokument im Navigationsbaum lokalisieren

Wie gut ein vorhandener Index die Datenselektion aus einer Tabelle unterstützt, hängt davon ab, wie weit die über den Index selektierte Datenmenge bereits die endgültig zu selektierende Menge darstellt. Dies wird am besten durch ein Beispiel veranschaulicht.

Beispiel

Ein Index ist über die Felder FELD1, FELD2, FELD3 und FELD4 einer Tabelle BSPTAB in dieser Reihenfolge definiert. Auf diese Tabelle wird zugegriffen mit der SELECT-Anweisung:

SELECT * FROM BSPTAB WHERE FELD1 = X1 AND FELD2 = X2 AND FELD4= X4

Da FELD3 nicht näher spezifiziert ist, ist die Sortierung des Index nur bis zu FELD2 brauchbar. Greift das Datenbanksystem über diesen Index auf die Daten zu, kann es also schnell alle Sätze finden, für die FELD1 = X1 und FELD2 = X2 gilt. Aus dieser Menge müssen dann noch alle Sätze nachselektiert werden, für die FELD4 = X4 gilt.

Hinweis

Die obige SQL-Anweisung ist ein Pseudocode, der die entsprechende Funktionalität erklärt. Die Syntax dieser Anweisung ist nicht mit der Anweisung in ABAP identisch.

Die Reihenfolge der Felder im Index spielt für die Zugriffsgeschwindigkeit eine wichtige Rolle. An erster Stelle müssen die Felder stehen, die bei vielen Selektionen mit konstanten Werten belegt sind. Ein Index ist bei der Selektion nur bis zum ersten nicht spezifizierten Feld von Nutzen.

Weiter sind nur solche Felder in einem Index sinnvoll, die die Ergebnismenge einer Selektion signifikant einschränken.

Beispiel

Auf eine Adressendatei ADRTAB wird häufig folgende Selektion durchgeführt:

SELECT * FROM ADRTAB WHERE TITEL = ‘Prof.’ AND NAME = X AND VORNAME = Y

In einem Index über NAME, VORNAME und TITEL schränkt das Feld TITEL die über Name und Vorname spezifizierten Sätze nur in seltenen Fällen weiter ein, da es nur wenige Personen gleichen Namens gibt, die sich nur im Titel unterscheiden. In diesem Fall ist der Index nicht sinnvoll. Ein Index über das Feld TITEL allein ist aber sinnvoll, wenn beispielsweise häufig alle Professoren selektiert werden.

Hinweis

Die obige SQL-Anweisung ist ein Pseudocode, der die entsprechende Funktionalität erklärt. Die Syntax dieser Anweisung ist nicht mit der Anweisung in ABAP identisch.

Hinweis

Zusätzlich angelegte Indizes können das System auch belasten, da diese bei jeder Änderung des Tabelleninhalts angepasst werden müssen. Jeder zusätzliche Index verlangsamt das Einfügen von Sätzen in die Tabelle.

Tabellen, in die häufig Einträge geschrieben werden, sollten nur wenige Indizes besitzen.

Hinweis

Auch wenn für eine Selektion ein passender Index existiert, wird dieser manchmal vom Datenbanksystem nicht benutzt. Welcher Index benutzt wird, hängt vom verwendeten Optimizer des Datenbanksystems ab. Sie müssen prüfen, ob der von Ihnen angelegte Index auch bei der Selektion verwendet wird (siehe Wie prüft man, ob ein Index verwendet wird?).

Das Anlegen eines zusätzlichen Index kann sich auch auf die Performance auswirken. Dies kann passieren, wenn ein bisher erfolgreich zur Selektion verwendeter Index nicht mehr vom Optimizer benutzt wird, da der neu angelegte Index vom Optimizer (manchmal fälschlicherweise) als selektiver eingeschätzt wird.

Achtung

Die Indizes zu einer Tabelle sollten deshalb möglichst disjunkt sein, d.h. möglichst wenige Felder gemeinsam haben. Haben zwei Indizes zu einer Tabelle viele gemeinsame Felder, so kann dies die Auswahl des selektivsten Index durch den Optimizer erschweren.

 

 

 

Ende des Inhaltsbereichs