Erste Seite Zurück Weiter Letzte Seite Übersicht Grafik

Aufbau


Notizen:

Die dargestellten blauen Pages 1-5 symbolisieren die Datenpages einer Tabelle mit einer Spalte, die uns aus irgendeinem Grund interessiert. Der Rest der Datensätze ist aus Gründen der Übersicht nicht dargestellt, ist aber vorhanden. Die Datensätze sind relativ lang, deswegen passen immer nur 2 auf eine Seite (die ja immer die gleiche Größe haben!) Bitte betrachten Sie für den Moment nur die Datenpages 1-5, am besten denken Sie sich die Pages 6-10 weg, deren Erläuterung folgt später.
Einfügungen passieren normalerweise am Tabellenende; da die Tabelle – was das dargestellte Feld betrifft – allem Anschein nach unsortiert ist, ist jede beliebige Einfüge- oder Update-Operation auch ohne Weiteres durchführbar. Im konkret vorliegenden Fall würde einfach eine sechste Datenseite geöffnet.
Anm.: Die Nummerierung der Daten- und Indexseiten ist hier rein symbolisch, tatsächlich benützt jedes Datenbanksystem einen eigenen Mechanismus. Die tatsächlich vergebenen Nummern gehen wild durcheinander, Hauptsache das Datenbanksystem behält den Überblick.
Problematisch kann es jedoch werden, wenn z.B. Operationen wie: „Selektiere alle Datensätze mit J“, „Sortiere die Datensätze“, oder „verhindere die Eingabe einer Doublette“, benötigt werden. Derartige Operationen können explizit durch einen SQL Befehl, aber natürlich auch „hinter den Kulissen ausgelöst werden, z.B. durch ein JOIN mehrerer Tabellen. Für alle drei genannten Operationen bleibt nichts anderes übrig, als alle Datenseiten anzusehen, was für große Tabellen naturgemäß extrem aufwändig wird.
Hier kommt der Index (beige Seiten 6-9 + rote Seite 10, die bitte immer noch wegdenken) ins Spiel. Betrachten wir zuerst die beiden Seiten: Auf ihnen sind (nur!) die indizierten Werte in sortierter Reihenfolge sowie die Nummer der Seite, auf der die Nutzdaten liegen, vorhanden. Der Indexwert ist mitsamt der Seitennummer in den meisten Fällen viel kleiner als der ganze Datensatz, weswegen auf jede Indexseite wesentlich mehr Einträge passen, als auf die Datenseiten der Tabelle (hier: 4, tatsächlich: meistens 100e). Immer noch müsste eine ganze Reihe von Indexseiten (6-8) sequenziell durchgelesen werden, wären Indizes nicht baumartig aufgebaut: Es gibt 1 Kopfseite (9), an der das Lesen des Index immer beginnt. Indizes können bei Bedarf auch mehrere Ebenen tief werden.
Um die Frage nach einem bestimmten Datensatz zu beantworten müssen jetzt immer 3 Seiten gelesen werden (2 Indexseiten und die eigentliche Datenseite), der Aufwand für die Operation ist nicht mehr von irgend einer zufälligen Datenverteilung abhängig.
Ob übrigens ein Index- oder ein Table-Scan durchgeführt wird, entscheidet der Optimizer anhand der Statistikseite (10). Diese stellt die prozentuale Verteilung der Datensätze über den gesamten Wertebereich für die indizierten Felder aufgeteilt in Intervalle dar.
Anm.: Zu beachten ist, dass die Statistikseite eines Index aktuell sein sollte, damit gute Entscheidungen getroffen werden können. Das gewährleisten Datenbanken üblicherweise nicht automatisch (was auch sinnvoll ist). Je größer eine Tabelle übrigens ist, desto seltener sind solche Updates der Statistikseite notwendig, weil sich die Datensatzverteilung meistens einer statistischen „Normalverteilung“ annähert.
Beachten Sie, dass das Einfügen eines Datensatzes jetzt nicht mehr trivial ist: Zum Einen muss der Datensatz ans Ende der Datenseiten (hier: auf eine neue Seite) gespeichert werden, aber auch in der Indexstruktur untergebracht werden. Für einen Datensatz bspw. mit einem „O“ ist das einfach: neue Seite im Datenbereich öffnen, „O“ mit der neuen Seitennummer auf Indexseite 8 eintragen, fertig.