Indizierung mit Access

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 (s. Abb. 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.

Abb. 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

  • Access prüft zunächst, ob zu der Tabelle tblMitarbeiter für das entsprechende Suchfeld ein Index definiert wurde.
  • Da im ersten Beispiel kein Index abgelegt wurde, wird nun jeder Datensatz der Tabelle eingelesen und das relevante Feld Nachname mit dem Suchbegriff verglichen. Ein Treffer wird intern markiert.
  • Nachdem alle Datensätze der Tabelle durchlaufen wurden, werden die markierten Treffer zurückgegeben.
  • 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.

    Abb. 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:

  • über einen binären Suchbaum wird der richtige Einstiegspunkt in die Index-Tabelle ermittelt. Details zur Funktionsweise binärer Suchbäume können Sie dem nachfolgenden Abschnitt “Binäre Suchbäume” entnehmen.
  • Nun werden alle Referenzen ermittelt, die im relevanten Indexbereich liegen. Das geht sehr schnell, da in diesem Schritt nicht die kompletten Daten (in unserem Beispiel die Nachnamen), sondern nur die Verweise auf die Daten gelesen werden.
  • Abschließend werden nur die relevanten Verweise aufgelöst und die “echten” Daten aus der Mitarbeiter-Tabelle ausgegeben.
  • 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 (s. Abb. 3).

    Abb. 3: Binärer Suchbaum

    Folgende Regeln gelten für binäre Bäume:

  • Der oberste Knoten eines Baumes wird als Wurzel bezeichnet – in diesem Fall ist das der Knoten mit der Nummer 29.
  • Die Knoten, die mit der Wurzel verbunden sind, werden als Nachfolger, Söhne oder Kinder bezeichnet – die Knoten mit den Nummern 5 und 41 stehen in einem solchen Verhältnis zum Wurzelknoten der Abbildung.
  • Die Wurzel heißt Vorgänger oder Vater ihrer Nachfolger. Diese Sprachregelung gilt nicht nur für die Wurzel, sondern für alle Knoten im Baum – der Knoten mit der Nummer 29 ist etwa Vorgänger von Knoten 5, Knoten 18 von 11 etc.
  • Ein Knoten ohne Nachfolger wie der Knoten mit der Nummer 11 heißt Blatt.
  • Eine Verbindung zwischen zwei Knoten wird als Kante bezeichnet.
  • Jeder von der Wurzel verschiedene Knoten im Baum wird durch genau eine Folge von Kanten erreicht.
  • Alle Nachfolger, die kleiner als ihr Vorgänger sind, werden auf der linken Seite des Baumes eingefügt. Alle Nachfolger, die größer als ihr Vorgänger sind, werden auf der rechten Seite des Baumes eingefügt.
  • 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.

    Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

    Workplace

    Jahresabonnement TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

    Schreibe einen Kommentar