Was sollten Sie bei Sekundärindizes beachten?
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.
Ein Index ist über die Felder FELD1, FELD2, FELD3 und FELD4 einer Tabelle BSPTAB in dieser Reihenfolge definiert. Auf diese Tabelle wird zugegriffen mit dem SELECT-Statement:
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.
Die Reihenfolge der Felder im Index spielt für die Zugriffsgeschwindigkeit eine entscheidende Rolle. An erster Stelle sollten die Felder stehen, die bei vielen Selektionen mit konstanten Werten belegt sind. Ein Index ist bei der Selektion nur bis zum ersten unspezifizierten Feld von Nutzen!
Weiter sind nur solche Felder in einem Index sinnvoll, die die Ergebnismenge einer Selektion signifikant einschränken.
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 würde das Feld TITEL die über Name und Vorname spezifizierten Sätze nur in seltenen Fällen weiter einschränken, da es vermutlich nur wenige Personen gleichen Namens gibt, die sich nur im Titel unterscheiden. Es wäre deshalb in diesem Index nicht sinnvoll. Ein Index über das Feld TITEL allein wäre aber unter Umständen sinnvoll, falls beispielsweise häufig alle Professoren selektiert werden.
Beachten Sie aber, daß zusätzlich angelegte Indizes das System auch belasten können, da diese bei jeder Änderung des Tabelleninhalts angepaßt werden müssen. Jeder zusätzliche Index verlangsamt deshalb das Einfügen von Sätzen in die Tabelle.
Tabellen, in die sehr häufig Einträge geschrieben werden, sollten also in der Regel nur wenige Indizes besitzen.
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 sollten deshalb prüfen, ob der von Ihnen angelegte Index auch bei der Selektion verwendet wird (siehe
Sie sollten auch beachten, daß das Anlegen eines zusätzlichen Index Seiteneffekte für die Performance haben kann. Denn ein bisher erfolgreich zur Selektion verwendeter Index wird unter Umständen vom Optimizer nicht mehr verwendet, da der neu angelegte Index vom Optimizer (manchmal fälschlicherweise) als selektiver eingeschätzt wird.
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.