Indices zur Beschleunigung von Datenzugriffen

Indices dienen bei Datenbanken dazu, für die Einträge einer Spalte eine zusätzliche geordnete Struktur zu erzeugen, so daß der Zugriff auf diese Spalte beschleunigt wird. Sie können über die folgende Maske erstellt werden:

SuchenNeuer Index Abbruch



Hilfe
Übersicht
Id
Index-Name
Spalte für den Index
Index-Status
Owner

Im Gegensatz zum MS-SqlServer unterstützt das hiesige System nur Indices auf einzelnen Spalten. Der Name des Index wird intern als Indexname verwendet. Der Status 'inactive' bedeutet, daß der Index physikalisch gelöscht wird, die erzeugte Definition jedoch noch erhalten bleibt.

Sicherheit

Zur Erstellung von Indices ist das Add-Recht für den Objekttyp 'Indices' oder ein stärkeres Recht notwendig. Ob ein Index verwendet wird, hängt von der konkreten Formulierung der Abfrage ab und wird intern vom Ms-Sqlserver entschieden. Dies ist folglich unabhängig von einer Execute-Berechtigung des Lesers, die Execute-Berechtigung wird für Indices ignoriert. Falls der Index zu einer Spalte mit Textdaten in einer sehr großen Tabelle erstellt wird, kann der Index die Datenbank merklich vergrößern. Da beim Erreichen der Maximalgröße keine weiteren Daten mehr hinzugefügt werden können, ist das Add-Recht für Indices wesentlich für die Datenbank. Ein Wechsel zum Status 'inactive' löscht den Index und kann dazu führen, daß mehr Platz zur Verfügung steht.

Hinweise

Intern hat jede Tabelle eine zusätzliche erste Spalte vom Datentyp Integer mit Startwert 1 und automatischer Hochzählung, diese Spalte wird als Primärschlüssel verwendet und ist indiziert. Falls in einzelnen Fällen bei größeren Tabellen das System wiederholt langsamer reagiert, können hier zusätzliche Indices definiert werden.

Solange eine Tabelle hinreichend klein (< 100 Zeilen als grober Richtwert) ist, lohnt sich die Erstellung eines Index meistens nicht.

Indices sollten nur auf Spalten definiert werden, die hinreichend selektiv sind. Enthält die Spalte nur wenige Werte, so nutzt ein Index nichts. Die beste Wirkung erzielt ein Index auf einer Spalte, in welcher alle Werte verschieden sind.

Brauchbare Kandidaten für Indices sind Spalten, die oft direkt in Where-Bedingungen oder in Join-Verknüpfungen im Rahmen selbstdefinierter Sql-Abfragen vorkommen. 'Direkt' meint hier einen Ausdruck wie:

U.ArtikelId = A.ArtikelId
oder
A.A_Name = @str_Input
Die Verwendung einer Spalte in einer Funktion oder in Form einer Verknüpfung mit einem Operator führt oft dazu, daß der Index wieder ignoriert und die gesamte Spalte gescannt wird.

Jeder Index verlangsamt Datenoperationen, da der Index durchsucht und ein passender Eintrag zusätzlich zur eigentlichen Datenzeile erzeugt werden muß. Indices sollten keinesfalls 'als Reserve' für möglichst viele Spalten erstellt werden.

Vor einem Upload einer umfangreichen Tabelle in eine bereits vorhandene Tabelle sollten in der Zieltabelle alle Indices deaktiviert werden, um den Upload zu beschleunigen.

Da ein Index die Spalte, für die er erstellt wird, mindestens kopiert, vergrößert jeder Index auf einer umfangreicheren Tabelle die Datenbank merklich. Falls die Datenbank ihre Maximalgröße schon fast erreicht hat, kann die Erstellung eines großen Index scheitern, da dieser zur Überschreitung der Maximalgröße führen würde.


Kontaktformular:

Schreiben Sie mir und wir bauen gemeinsam Ihre neue Web-Datenbank!

Die Erläuterungen zum Datenschutz habe ich gelesen und stimme diesen zu.

© 2003-2018 Jürgen Auer, Berlin.