Zusammenfassung
Das Indizieren kann der Performance zu- oder abträglich sein. Erfahren Sie, wie Sie die Indizierung richtig einsetzen.
Techniken
Tabellen, Indizierung
Voraussetzungen
Access 97 oder höher
Beispieldateien
Dirk Bauer, Düsseldorf
Sie haben zahllose Arbeitsstunden für das Datenmodell Ihrer Anwendung aufgewendet, eine schöne Oberfläche erstellt, viele nette Funktionen implementiert und vor der Freigabe der Software alles ausführlich getestet. Trotzdem ist die ausgefeilte Suchabfrage der Daten schon kurz nach der Einführung der Software auf einmal so langsam, dass ein vernünftiges Arbeiten mit der Access-Anwendung nicht mehr möglich scheint. Nun ist es höchste Zeit, sich die Indizes in den Tabellen Ihrer Anwendung anzusehen!
Um den Sinn und Zweck eines Datenbank-Index zu verstehen, sehen Sie sich das folgende Beispiel an: Eine Access-Anwendung enthält eine Tabelle tblMitarbeiter. In dieser Tabelle werden alle Mitarbeiter eines Unternehmens mit ihren üblichen Attributen wie Nachname, Vorname, Telefonnummer und so weiter abgelegt (siehe Bild 1).
In der Anwendung soll es nun möglich sein, über eine Suchmaske den Nachnamen eines Mitarbeiters ganz oder teilweise einzugeben.
Die Anwendung soll anschließend alle Mitarbeiter ausgeben, die dem erfassten Suchbegriff entsprechen.
Bild 1: Beispieltabelle “Mitarbeiter”
Ohne weitere Modifikation der Tabelle tblMitarbeiter legt Access für das Textfeld “Nachname” bei der Definition der Tabellenstruktur keinen Index an. Stellen Sie sich nun vor, dass die Tabelle mit den Daten einiger Mitarbeiter in einer beliebigen Reihenfolge gefüllt wird. Danach führen Sie die erste Suche mit einem beliebigen Nachnamen durch. Welche Schritte führt die Datenbank-Engine von Access nun intern aus, um alle Mitarbeiter mit dem gesuchten Nachnamen zu ermitteln
Das Durchlaufen aller Zeilen einer Tabelle wird “Tablescan” genannt, da jede einzelne Zeile in dem relevanten Feld nach dem Suchwert “gescannt” wird. Ein Tablescan ist bei einigen wenigen Datensätzen kein Problem, da nicht besonders viele Daten überprüft werden. Was aber wäre, wenn wir das komplette Telefonbuch einer Großstadt in dieser Tabelle abgelegt hätten
Um das Beispiel nun ein wenig zu modifizieren, sollten Sie sich einmal überlegen, wie Sie einen bestimmten Gesprächspartner aus dem öffentlichen Telefonbuch heraussuchen.
Mit Sicherheit werden Sie nicht jeden Eintrag auf den einzelnen Seiten des Telefonbuches durchlesen, bis Sie Ihren gewünschten Gesprächspartner gefunden haben.
Statt dieser sehr aufwändigen Methode werden Sie normalerweise den Index am oberen Rand jeder Telefonbuchseite verwenden.
Sie kommen auf diese Weise sehr schnell auf die relevante Seite und können dann gezielt nach einigen wenigen Zeilen Ihren Gesprächspartner ermitteln.
Damit Access bei der Abfrage von Daten ebenfalls die Vorteile eines Index verwenden kann, muss für das Textfeld Nachname zunächst ein Index erstellt werden.
Bei der Definition des Index gehen wir weiter davon aus, dass der Index als “aufsteigend sortiert” angelegt wird. Abb. 2 veranschaulicht die interne Situation nach der Anlage eines Index.
Auf der rechten Seite ist die Mitarbeiter-Tabelle dargestellt. Wir betrachten hier nun lediglich das für die Suche relevante Feld Nachname mit einigen Testdaten.
Links neben der Spalte Nachname ist zur Veranschaulichung die Reihenfolge des jeweiligen Nachnamens dargestellt. So ist zum Beispiel der Nachname “Bauer” als fünfter Datensatz erfasst. Die Einträge wurden offensichtlich nicht sortiert abgelegt, sondern in einer willkürlichen Reihenfolge.
Bild 2: Aufbau eines einfachen Index
Auf der linken Seite ist eine interne, von Access erzeugte Index-Tabelle zu sehen. Der Index wurde mit dem Namen des zu indizierenden Feldes (“Nachname”) benannt.
Da der Index aufsteigend sortiert aufgebaut wurde, verweisen die referenzierten Einträge in der Index-Tabelle nun in einer anderen Reihenfolge auf die Mitarbeiter-Tabelle als ursprünglich. Wenn nun zum Beispiel nach allen Einträgen gesucht wird, die mit dem Buchstaben “B” beginnen, geht Access wie folgt vor:
Binäre Suchbäume
Damit Access bei der Suche nach den relevanten Daten nicht den kompletten Index lesen muss, wird der Index intern als “binärer Suchbaum” abgelegt.
Ein einfaches Beispiel anhand von Zahlen soll die Arbeitsweise eines solchen Baumes demonstrieren (siehe Bild 3).
Bild 3: Binärer Suchbaum
Folgende Regeln gelten für binäre Bäume:
Der dargestellte Baum speichert exemplarisch die Zahlenmenge {1, 5, 11, 18, 29, 41}. Die Art der Darstellung ist nur eine von vielen möglichen Darstellungen dieser Menge und zum Beispiel davon abhängig, welche Zahl zuerst gespeichert wurde und wie der Baum in das Gleichgewicht zwischen der linken und der rechten Seite gebracht werden kann.
Im vorliegenden Fall wurde zunächst die Zahl 29 gespeichert und somit automatisch zur Wurzel des Baums.
Wie wird nun beispielsweise der Wert 18 im Baum gefunden Zunächst vergleicht die Jet-Engine die Wurzel (Nummer 29) mit dem Wert 18.
Da der gesuchte Wert 18 kleiner als die Wurzel ist, verzweigt die Jet-Engine auf der Suche gemäß Definition nach links und gelangt zum Knoten 5. Der Wert 18 ist größer als der Wert 5 und somit verschlägt die Suche die Jet-Engine diesmal nach rechts.