Access 2010: Index / Indizes
Index / Indizes
Innerhalb der Spalten einer Tabelle stehen Werte bei ihren zugehörigen Datensätzen. Innerhalb der einzelnen Spalten folgen die Werte aber keiner Sortierung. Wird ein bestimmter Wert gesucht, zum Beispiel für einen Filter oder eine Abfrage, so muss jeder Einzelwert der Spalte mit dem gesuchten Wert verglichen werden. Dies ist bei großen Tabellen mit tausenden Einträgen eine aufwändige Arbeit und benötigt viel Rechenleistung und Zeit. Ein Index kann diese Zeit drastisch reduzieren.
Der Index ist eine Datenstruktur, die innerhalb einer Tabelle zusätzlich zu einer bestehenden Spalte angelegt wird, um den Datenzugriff zu beschleunigen. Dazu werden alle Werte der Spalte gesammelt und in sortierter Reihenfolge in der Datenstruktur abgelegt. Neben den Werten speichert der Index die zugehörigen Adressen der Herkunftsspalte. Vereinfacht gesagt ist ein Index also eine zusätzliche nach Werten sortierte Tabelle mit zwei Spalten. Das folgende (vereinfachte) Beispiel zeigt, wie dadurch der Suchaufwand drastisch reduziert wird.
Stellen wir uns eine Tabelle mit eintausend Datensätzen vor, aus welcher ein Wert aus einer Spalte gesucht wird. Für unser Beispiel wissen wir jetzt einfach, dass der gesuchte Werte in der 720sten Zeile steht. Der Computer weiß es aber nicht, wenn er mit seiner Suche beginnt. Existiert kein Index, so vergleicht er den Suchwert mit dem Wert in der ersten Zeile unserer Spalte. Die Werte sind unterschiedlich, also setzt der Computer seine Suche durch den Vergleich mit dem Wert in der zweiten Zeile fort. Wieder hat er keinen Erfolg, weshalb er den Vorgang in der dritten, vierten, fünften Zeile wiederholt. Wie wir wissen, wird der Computer erst nach 719 Fehlversuchen Erfolg haben. Aufhören kann er deshalb aber noch nicht mit seiner Suche. Vielleicht kommt der Wert ja zwischen der 721sten und der 1000sten Zeile erneut vor. Insgesamt muss der Computer also 1000 Werte miteinander vergleichen, um sein Ergebnis präsentieren zu können. Wäre bekannt, dass der gesuchte Wert nur ein einziges mal in der Spalte vorkommt, so wären immer noch 720 Vergleiche notwendig gewesen. Existiert für die Spalte allerdings ein Index, so lässt sich die Suche deutlich verkürzen. Im Index stehen die Werte in sortierter Reihenfolge, sagen wir in aufsteigender Reihenfolge von minimal 1 bis maximal 1000. Egal, welchen Wert man an einer beliebigen Stelle findet, weiß man, dass alle vorausgehenden Werte kleiner oder gleich dem dortigen Werten sein müssen. Der Computer beginnt seine Suche nun nicht am Anfang sondern in der Mitte, sagen wir an der Stelle 500. Er vergleicht nun nicht nur, ob die Werte übereinstimmen, sondern er vergleicht ob sein gesuchter Wert größer oder kleiner ist als der Wert an der 500sten Stelle. Ist der gesuchte Wert größer, so muss der Computer von hier aus nur noch alle Werte jenseits der 500sten Stelle durchsuchen, ist er kleiner, muss er alle Werte unterhalb der 500sten Position durchsuchen. Die Suchmenge wurde also bereits halbiert. Für seinen nächsten Vergleich wählt der Computer einen Wert, der in der Mitte der verbliebenen Suchmenge liegt. Erneut prüft er, ob der dort gefundene Wert größer oder kleiner ist. Erneut wurde dadurch die Suchmenge halbiert. Nach diesem Muster setzt der Computer seine Suche fort, bis er den gesuchten Wert gefunden hat. Da im Index neben dem Wert auch die Adresse des Wertes in der ursprünglichen Tabelle gespeichert ist, kann der Computer sofort sein Ergebnis präsentieren. Ist bekannt, dass der Wert mehrfach in der Spalte vorkommen kann, muss er ggf. noch überprüfen, ob die Nachbarwerte ebenfalls dem gesuchten Wert entsprechen. Insgesamt benötigt die Suche mit dem Index aber deutlich weniger Vergleiche als die Suche ohne Index und benötigt daher auch weniger Zeit und Rechenaufwand.
Das oben stehende Beispiel vernachlässigt sicherlich, dass für die Erstellung des Indexes ebenfalls Rechenzeit und innerhalb der Datenbank Speicherplatz benötigt wird. Die Erstellung eines Indexes lohnt sich daher nur für Spalten mit vielen Werten, die häufig durchsucht werden müssen. Bei der Dateneingabe ergibt sich bei indizierten Spalten zudem jedesmal eine kleine Zeitverzögerung, da nicht nur der Wert in die Tabelle eingetragen, sondern auch gleichzeitig jedes Mal der Index aktualisiert werden muss. Bei größeren Eingabeoperationen kann es daher sinnvoll sein, den Index kurzzeitig zu entfernen und dann nach Abschluss der Eingabe wieder zu aktivieren. Da moderne Computer Daten sehr schnell verarbeiten können, werden Sie beim Entwurf einer Datenbank zwischen einer indizierten und einer nicht indizierten Spalte bei der Suche vielleicht keinen fühlbaren Unterschied bemerken. Bitte bedenken Sie aber, dass Datenbanken schnell anwachsen können und sich mit gestiegenem Datenaufkommen zunächst nur kleine Zeitvorteile rasch deutlicher bemerkbar machen.
Access kennt verschiedene, miteinander kombinierbare Arten von Indizes:
- Index mit Duplikaten - Ein solcher Index kann mehrere identische Werte enthalten.
- Index ohne Duplikate - Ein solcher Index kann einen bestimmten Wert nur einmal enthalten. Ein bekanntes Beispiel für ein solcher Index ist der Primärschlüssel.
- Einfacher Index - Der Index beschränkt sich auf ein Datenfeld (eine Spalte).
- Zusammengesetzter Index - Benötigt ein Datensatz mehrere Felder, so sortiert Access erst nach dem ersten Indexfeld. Findet es dabei Duplikate, wird zusätzlich nach dem zweiten Indexfeld sortiert.