Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 6/2005.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

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

-

Indizierung mit Access

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!

Einführung in die Indizierung

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.

    Falls der gesuchte Wert weder größer noch kleiner als der aktuelle Knoten ist, handelt es sich um einen Treffer und die Suche ist beendet.

    Suchen Sie einen Wert, der nicht im Baum vorkommt - zum Beispiel die Zahl 21 - dann endet die Suche im Knoten mit dem Wert 18. Die gesuchte Zahl müsste nämlich im rechten Teilbaum des Knotens 18 liegen.

    Da dieser Teilbaum nicht mehr vorhanden ist, ist die Suche erfolglos und kann ohne weitere Vergleiche abgebrochen werden.

    Wenn Sie die Zahl 21 in den Suchbaum einfügen möchten, führt Sie die Suche zunächst wie beschrieben bis zum Knoten mit dem Wert 18. Dann wird der Knoten 21 als Nachfolger von Knoten 18 und als neues Blatt auf der rechten Seite eingefügt.

    Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

    Sind Sie Abonnent?Jetzt einloggen ...
     

    Kompletten Artikel lesen?

    Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

    E-Mail:

    Verwandte Beiträge:

    Tabellen und Felder dokumentieren

    Datenbanken und Tabellen per SQL anpassen

    DAO: Tabellen, Felder und Co. bearbeiten

    Die Microsoft Data Engine (MSDE)

    SQL-Datenbankschema auslesen

    Professionelle Datenmodellierung mit Access

    Schnelle Domänenfunktionen

    Daten aus verknüpften Tabellen kopieren

    Tipps und Tricks

    Datenhierarchien in Access

    Datenzugriff per VBA vereinfachen

    Bücherverwaltung

    Access 2007: Anlagefelder

    Tipps und Tricks

    Softwareprojekte verwalten

    Excel-Daten importieren mit TransferSpreadsheet

    Änderungsdaten protokollieren

    Performanter Webzugriff auf MySQL-Datenbanken

    Temporäre Tabellen

    Pivot-Tabellen mit Access

    Anwendungsoptionen in Tabellen speichern

    Benutzerdefinierte Funktionen im MS SQL Server

    Verknüpfte Datenbanken updaten

    Tabellen wie unter Excel

    Arrays, Collections und Dictionarys

    Beschreibung von Tabellen und Co. nutzen

    © 2003-2015 André Minhorst Alle Rechte vorbehalten.