## CREATE INDEX-Anweisung (create_index_statement)

Die CREATE INDEX-Anweisung (create_index_statement) definiert einen Index einer Basistabelle.

### Syntax

<create_index_statement> ::=
CREATE [UNIQUE] INDEX <index_name> ON <table_name> (<index_spec>)

<index_spec> ::=
<index_column_name>,...
| <dbfunction_name>(<column_name>,...) [ASC|DESC]

<index_column_name> ::=
<column_name> [ASC|DESC]

### Beispiele

SQL-Tutorial, Indizes

### Erläuterung

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.

● Wenn im Tabellennamen kein Schema angegeben ist, wird implizit das aktuelle Schema angenommen.

● 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 das INDEX-Privileg 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.

● Restriktionen für SQL-Anweisungen

##### UNIQUE

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.

##### ASC | DESC

Die Indexwerte werden in aufsteigender oder absteigender Reihenfolge abgelegt. Fehlt die Angabe von ASC oder DESC, dann wird implizit ASC angenommen.

Siehe auch:

UNIQUE-Definition (unique_definition)