2.1. Allgemeines
Wird eine Zeile in einer realen Tabelle gesucht, die in einer Spalte bzw. Spaltenkombination vorgegebene Werte enthält, so muß die gesamte Tabelle durchsucht werden. die realen Implementationen sind bemüht, die Zugriffe auf den externen Speicher möglichst gering zu halten, da diese Zugriffe langsam sind. Deshalb sind üblicherweise Methoden implementiert, die es gestatten, Zeilen direkt zu adressieren. Dies erreicht man durch Errichtung eines Indexes. Ist für die betrachtete Tabelle ein Index auf die Spalte bzw. Spaltenkombiantion errichtet worden, so muß nur im Index nachgeschaut werden, wo die betreffende Zeile steht (es können auch mehrere Zeilen sein, die die Bedingung erfüllen). ein Index ist in der Regel wesentlich kleiner als
die Tabelle und zudem so organisiert, daß er schnell durchsucht werden kann. Dadurch
wird beim Suchen die Zahl der Zugriffe auf den externen Speicher erheblich verringert.
2.2. Syntax
Die Länge der einzelnen Spalten hängt von ihren Datentypen ab.
Datentyp Länge
Character pro Zeichen 1 Byte
Numeric 12 Bytes
Date/Time 12 Bytes
Ein Beispiel für die Berechnung von Indexes.
Nachname CHAR(20)
Vorname CHAR(20)
Geschl CHAR(1)
41
daraus ergibt sich:
6 + 3 + 41 = 50
SEHR_GROSS CHAR(249)
6 + 1 + 249 = 256
256 > 255
Es kommt zur Fehlermeldung:
Index key is too large
2.2.1. index-name
Der Indexname muß in der gesamten Datenbank eindeutig sein.
2.2.2. table-name
Auf Views können keine Indexe gelegt werden.
2.2.3. UNIQUE
Erzeugt einen Schlüssel - Index. Die Wertekombination der einzelnen Elemente darf in der Tabelle nur ein einziges mal vorkommen. Existieren bereits zur Indexerstellung doppelte Werte kommt es zu einer Fehler Meldung. Ebenso bei Update oder Insert.
2.2.4. CLUSTERED HASHED
Ein Clustered Hashed Index erlaubt einen schnellern Zugriff auf die Daten. Besteht ein Index aus unique und clustered hashed kann mit einem Plattenzugriff eine Zeile ausgelesen werden.
Ist kein clustered hashed definiert wird der Index als B-Baum erzeugt.
2.2.5. ASC,DESC
Definiert ob der index aufsteigend oder Absteigend sortiert wird. Diese Klausel ist nur für B-Bäume interessant. Wird die Klausel nicht angeben wird default mäßig ASC genommen.
2.2.6. PCTFREE
Die PCTFREE (prozent frei) klausel definiert, wieviel Platz in jeder Indexseite sein muß wenn der Index erstellt wird. Wird diese klausel nicht angegeben ist der default Wert 10%
2.2.7. SIZE integer-constatnt ROWS
Diese Angabe kontrolliert die größe des Indexes und wird in Anzahl der Reihen angegeben. Ist diese größe zu klein angeben kann es overflow pages kommen. Ist die angebene größe zu groß, wird das overflow page nicht verwendet, aber der Platz auf der Platte ist verbraucht. Diese Klausel wird nur bei clustered hashed Indexe benötigt. und ist dort unbedingt erforderlich.
2.3. Funktionen in Index
Ein Index kann für mehrere Spalten gebildet werden. Diese Spalten können durch Funktionen verbunden werden. Es können jedoch nicht alle Funktionen in Index eingebaut werden.
@CHAR
@CODE
@DATEVALUE
@DAY
@HOUR
@LEFT
@LENGTH
@LICS
@LOWER
@MICROSECOND
@MID
@MINUTE
@MONTH
@MONTHBEG
@PROPER
@QUARTER
@QUARTERBERG
@RIGHT
@SECOND
@STRING
@SUBSTRING
@TIMEVALUE
@TRIM
@UPPER
@VALUE
@WEEKBEG
@WEEKDAY
@YEAR
@YEARBEG
@YEARNUM
2.4. Beispiele
CREATE UNIQE INDEX sWare ON Ware (Artikel#)
CREATE UNIQE INDEX sKunde ON Kunde (Kundenl#)
CREATE UNIQE INDEX sAuftrag ON Auftrag(RE#)
CREATE UNIQE INDEX sPos ON Pos (RE#,POS#)
CREATE INDEX KUINDEX ON KUNDE (@UPPER(name))
SELECT name FROM KUNDE
WHERE @UPPER(name) = \'HUBER\'
|