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. Wenn die Hybridtabelle jedoch nicht aktiv verwendet wird und Ausfallzeiten kein Thema sind, sollten Sie die Hybridtabelle mit definierten Indizes neu erstellen. Siehe auch Hybride Tabellen erstellen.
- 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>
ON <table_name>
( <col_name> [ , <col_name> , ... ] )
Parameter¶
index_name
Gibt den Bezeichner des neuen Index an. Sie müssen für jeden neuen Index auf einer bestimmten Hybridtabelle einen eindeutigen Namen angeben. Es darf kein anderer sekundärer Index mit demselben Namen oder demselben geordneten Satz von Spalten in der Hybridtabelle existieren.
table_name
Gibt den Namen einer bestehenden Hybridtabelle an, die den neuen Index enthalten soll.
col_name
Gibt den Namen einer bestehenden Spalte in der Hybridtabelle an. Alle Anforderungen für Indexspalten, die beim Erstellen der Tabellen definiert werden, gelten für Spaltenbezeichner.
Eine Hybridtabelle kann nicht zwei sekundäre Indizes enthalten, die über demselben geordneten Satz von Spalten definiert sind.
Spalten mit Datentypen für Geodaten (GEOGRAPHY und GEOMETRY), semistrukturierten Datentypen (ARRAY, OBJECT, VARIANT) und Vektor-Datentypen (VECTOR) werden in sekundären Indizes nicht unterstützt.
Anforderungen an die Zugriffssteuerung¶
Um einen Index zu erstellen, müssen Sie eine Rolle verwenden, die über die OWNERSHIP-Berechtigung für die Hybridtabelle verfügt.
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.
Das Erstellen eines neuen Index führt nicht zum gleichzeitigen Blockieren anderer Workloads. Die Hybridtabelle ist gleichzeitige SELECT- und DML-Anweisungen verfügbar.
Es kann immer nur eine aktive Operation zum Aufbau eines Index pro Hybridtabelle laufen.
Sie können den Fortschritt eines Indexaufbaus 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
oderBUILD 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, stoppen Sie zunächst den Indexaufbau, indem Sie den Index löschen, und löschen Sie dann die Spalte. Wenn Sie versuchen, die Spalte zu löschen, bevor Sie den Index löschen, erhalten Sie diese Fehlermeldung:
Column '<col_name>' cannot be dropped because it is used by index '<index-name>'.
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, deren Ausführung begonnen hat, nachdem der Befehl CREATE INDEX abgeschlossen war, 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 erstellt Index wird nur dann zum Abrufen von Daten verwendet, wenn der Indexerstellungsprozess erfolgreich abgeschlossen wurde und der Status des Index
ACTIVE
ist.
Beispiele¶
Um das folgende CREATE INDEX-Beispiel auszuführen, erstellen und laden Sie zunächst die Hybridtabelle.
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);
Jetzt können Sie einen Index für die Tabelle erstellen.
CREATE OR REPLACE INDEX vidx ON mytable (val);
+----------------------------------+
| status |
|----------------------------------|
| Statement executed successfully. |
+----------------------------------+
Wenn ein Fehler auftritt, während der Index erstellt wird, meldet der Befehl SHOW INDEXES den folgenden Status:
BUILD FAILURE Index build failed. Please drop the index and re-create it.
Wenn Sie den Indexaufbau stoppen möchten, verwenden Sie den Befehl DROP INDEX:
DROP INDEX mytable.vidx;
+-------------------------------------+
| status |
|-------------------------------------|
| Statement executed successfully. |
+-------------------------------------+