Die CREATE INDEX-Anweisung (create_index_statement) definiert einen Index einer Basistabelle.
<create_index_statement> ::=
CREATE [UNIQUE] INDEX <index_name> ON <table_name>
(<index_spec>)
<index_spec> ::= <column_name> [ASC|DESC]
| <dbfunction_name> (<column_name>,...)
[ASC|DESC]
index_name, table_name, column_name, dbfunction_name
Indizes unterstützen den Zugriff auf die Tabellendaten über Nicht-Schlüsselspalten. Ihre Pflege bedeutet jedoch erhöhten Aufwand bei einer INSERT-, UPDATE oder DELETE-Anweisung.
Die Angabe eines Datenbankfunktionsnamens definiert einen Funktionsindex. Diese Indizes können Anfragen beschleunigen, die die Datenbankfunktion in ihrer Suchbedingung enthalten, oder die nach der Datenbankfunktion sortieren.
Ist kein Datenbankfunktionsname angegeben, wird der Index über die angegebenen Spalten der Tabelle erzeugt. Der Sekundärschlüssel setzt sich in diesem Fall aus den angegebenen Spalten der Tabelle zusammen, und zwar in der angegebenen Reihenfolge.
· Die angegebene Tabelle muss eine existierende Basistabelle sein, darf jedoch keine temporäre Tabelle sein. Der Indexname darf nicht mit einem bereits existierenden Indexnamen der Tabelle übereinstimmen.
· Die durch column_name definierte Spalte muss eine Spalte der angegebenen Tabelle sein. Diese Spalte darf keine LONG-Spalte sein. Alle Spaltennamen müssen paarweise verschieden sein.
· Der aktuelle Benutzer muss den Privileg-Typ INDEX für die Spalten besitzen.
·
Die durch den Datenbankfunktionsnamen
identifizierte Datenbankfunktion muss folgende Bedingungen erfüllen:
Der aktuelle Benutzer muss das Privileg EXECUTE für die Datenbankfunktion
besitzen.
Die Datenbankfunktion darf keine SQL-Anweisung enthalten.
Die angegebenen Spaltennamen müssen mit den Parametern der Funktion
typverträglich sein.
Das Ergebnis der Datenbankfunktion muss deterministisch sein, d.h. die
mehrmalige Ausführung der Funktion mit gleichen Parametern liefert immer das
gleiche Resultat.
Durch diese Angabe wird sichergestellt, dass keine zwei Zeilen der angegebenen Tabelle in den indizierten Spalten dieselben Werte besitzen. Enthalten zwei Zeilen für alle Spalten eines Index jeweils den NULL-Wert, so gelten diese beiden Indexwerte nicht als identisch. Enthält mindestens eine Spalte nicht den NULL-Wert, so gelten zwei Zeilen, die in allen Nicht-NULL-Spalten den gleichen Wert besitzen, als identisch.
Die Indexwerte werden in aufsteigender oder absteigender Reihenfolge abgelegt. Fehlt die Angabe von ASC oder DESC, dann wird implizit ASC angenommen.