CREATE INDEX¶
Erstellt einen neuen sekundären Index in einer bestehenden Hybridtabelle und füllt den Index mit Daten auf.
Das Erstellen eines Index ist eine Online-Operation (nicht blockierend). Die Hybridtabelle bleibt für SELECT- und DML-Anweisungen verfügbar, während der Index erstellt wird.
- Siehe auch:
DROP INDEX, SHOW INDEXES, CREATE HYBRID TABLE, DROP TABLE, DESCRIBE TABLE, SHOW HYBRID TABLES
Syntax¶
CREATE [ OR REPLACE ] INDEX [ IF NOT EXISTS ] <index_name>
( <col_name>
[ , <col_name> ] ) ON <table_name>
Parameter¶
index_name
Gibt den Bezeichner des neuen Index an. Der Name muss für die Hybridtabelle, für die der Index erstellt wird, eindeutig sein. Es kann keinen anderen sekundären Index mit demselben Namen oder auf demselben geordneten Satz von Spalten für die Hybridtabelle geben.
table_name
Gibt den Namen einer bestehenden Hybridtabelle an, die den neuen Index enthalten soll.
col_name
Gibt den Namen einer vorhandenen Spalte der Hybridtabelle an. Alle Anforderungen für Indexspalten, die beim Erstellen der Tabellen definiert werden, gelten für Spaltenbezeichner.
Nutzungshinweise¶
Der Befehl CREATE INDEX kann nicht verwendet werden, um eine Beschränkung für Fremdschlüssel, Primärschlüssel oder eindeutige Schlüssel hinzuzufügen.
Um einen Index zu erstellen, müssen Sie eine Rolle verwenden, die über die OWNERSHIP-Berechtigung für die Hybridtabelle verfügt.
Sie müssen für jeden neuen Index einer gegebenen Hybridtabelle einen eindeutigen Namen wählen.
Bei der Auswahl der Spalten für den neuen Index ist zu beachten, dass eine Hybridtabelle nicht zwei sekundäre Indizes enthalten kann, die über demselben geordneten Satz von Spalten definiert sind.
Einige Spaltentypen (z. B. VARIANT) sind in einem sekundären Index nicht zulässig.
Das Erstellen eines neuen Index führt nicht zum gleichzeitigen Blockieren anderer Workloads. Die Hybridtabelle ist gleichzeitige SELECT- und DML-Anweisungen verfügbar.
Es ist immer nur eine aktive Indexerstellungsoperation pro Hybridtabelle erlaubt.
Sie können den Fortschritt einer Indexerstellung mit SHOW INDEXES verfolgen. Die Spalte STATUS kann die folgenden Werte enthalten:
ACTIVE: Der Index ist vollständig und kann zum Abrufen von Daten verwendet werden.
SUSPENDED: Der Index wird nur aktualisiert und wird nicht zum Abrufen von Daten verwendet.
BUILD FAILURE: Bei der Indexerstellung ist ein Fehler aufgetreten. Sie müssen den Index löschen und neu erstellen.
BUILD IN PROGRESS: Der Index wird gerade erstellt und wird nicht zum Abrufen von Daten verwendet.
Sie können einen nicht aktiven Index, dessen Status SUSPENDED, BUILD FAILURE oder BUILD IN PROGRESS ist, mithilfe von DROP INDEX und CREATE INDEX wiederherstellen.
Wenn Sie eine Spalte löschen möchten, die Teil eines im Aufbau befindlichen Indexes ist, müssen Sie zuerst die Indexerstellung stoppen, indem Sie den Index löschen und dann die Spalte löschen. Wenn Sie versuchen, zuerst die Spalte zu löschen, bevor Sie den Index löschen, erhalten Sie folgende Fehlermeldung:
Column '<Spaltenname>' cannot be dropped because it is used by index '<Indexname>'.
Die Online-Indexerstellung macht erst dann Fortschritte, wenn alle aktiven Transaktionen mit DMLs auf derselben Tabelle zum Zeitpunkt der Ausgabe der CREATE INDEX-Anweisung abgeschlossen sind. Wenn sich eine dieser Transaktionen länger als 5 Minuten im Leerlauf (idle) befindet, wird sie standardmäßig abgebrochen. Siehe Transaktionen.
Während der Indexerstellung führt jede DML-Anweisung ihre Schreiboperationen für den neuen Index aus, verwendet den Index aber nicht zum Abrufen von Daten.
Eine kleine Anzahl von gleichzeitigen DMLs, die die Ausführung nach Beendigung des CREATE INDEX-Befehls begonnen haben, kann fehlschlagen und folgenden Fehler zurückgeben:
DML was unaware of concurrent DDL. Please retry this query.
Wenn die abgebrochenen DML-Anweisungen zu einer Transaktion mit mehreren Anweisungen gehören, wird die Transaktion nur zurückgesetzt, wenn der Parameter TRANSACTION_ABORT_ON_ERROR auf
TRUE
gesetzt ist.Ein neu erstellter Index wird nur dann zum Abrufen von Daten verwendet, wenn der Indexerstellungsprozess erfolgreich abgeschlossen wurde und der Status des Index ACTIVE ist.
Beispiele¶
In den folgenden Beispielen wird davon ausgegangen, dass Sie bereits eine Hybridtabelle erstellt haben und dass diese einige Datensätze enthält.
CREATE OR REPLACE HYBRID TABLE mytable (
pk INT PRIMARY KEY,
val INT
val2 INT
);
INSERT INTO mytable SELECT seq, seq+100, seq+200
FROM (SELECT seq8() seq FROM TABLE(GENERATOR(rowcount => 100)) v);
Sie können einen Index für die Tabelle wie folgt erstellen:
CREATE OR REPLACE INDEX vidx (val) ON mytable;
Der Befehl gibt folgende Meldung zurück: BUILD IN PROGRESS The index is being built and will register concurrent DML changes to the base table. The index will not be used until it has finished building.
Tritt während der Indexerstellung ein Fehler auf, zeigt der Befehl SHOW INDEXES an, dass die Operation fehlgeschlagen ist: BUILD FAILURE Index build failed. Please drop the index and re-create it.
Wenn Sie die Indexerstellung stoppen möchten, können Sie den Befehl DROP INDEX verwenden:
DROP INDEX vid ON mytable;
+-------------------------------------+
| status |
|-------------------------------------|
| Statement executed successfully. |
+-------------------------------------+