Verwalten von Indexen - Amazon Quantum Ledger-Datenbank (AmazonQLDB)

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwalten von Indexen

Wichtig

Hinweis zum Ende des Supports: Bestandskunden können Amazon QLDB bis zum Ende des Supports am 31.07.2025 nutzen. Weitere Informationen finden Sie unter Migrieren eines Amazon QLDB Ledgers zu Amazon Aurora SQL Postgre.

In diesem Abschnitt wird beschrieben, wie Sie Indizes in Amazon QLDB erstellen, beschreiben und löschen. Das Kontingent für die Anzahl der Indizes pro Tabelle, die Sie erstellen können, ist in definiert. Kontingente und Limits bei Amazon QLDB

Erstellen von Indizes

Wie auch unter beschriebenTabellen und Indizes erstellen, können Sie die CREATEINDEXAnweisung wie folgt verwenden, um einen Index für eine Tabelle für ein bestimmtes Feld der obersten Ebene zu erstellen. Sowohl beim Tabellennamen als auch beim indizierten Feldnamen wird zwischen Groß- und Kleinschreibung unterschieden.

CREATE INDEX ON VehicleRegistration (VIN)
CREATE INDEX ON VehicleRegistration (LicensePlateNumber)

Jeder Index, den Sie für eine Tabelle erstellen, hat eine vom System zugewiesene eindeutige ID. Informationen zur Suche nach dieser Index-ID finden Sie im folgenden Abschnitt. Beschreibung von Indizes

Wichtig

QLDBbenötigt einen Index, um ein Dokument effizient nachschlagen zu können. Ohne Index QLDB muss beim Lesen von Dokumenten ein vollständiger Tabellenscan durchgeführt werden. Dies kann bei großen Tabellen zu Leistungsproblemen führen, einschließlich Parallelitätskonflikten und Transaktions-Timeouts.

Um Tabellenscans zu vermeiden, müssen Sie Anweisungen mit einer WHERE Prädikatklausel unter Verwendung eines Gleichheitsoperators (=oderIN) für ein indiziertes Feld oder eine Dokument-ID ausführen. Weitere Informationen finden Sie unter Optimierung der Abfrageleistung.

Beachten Sie beim Erstellen von Indizes die folgenden Einschränkungen:

  • Ein Index kann nur für ein einzelnes Feld der obersten Ebene erstellt werden. Zusammengesetzte, verschachtelte, eindeutige und funktionsbasierte Indizes werden nicht unterstützt.

  • Sie können einen Index für alle Ion-Datentypen erstellen, einschließlich und. list struct Sie können die indizierte Suche jedoch nur nach Gleichheit des gesamten Ionen-Werts durchführen, unabhängig vom Ionentyp. Wenn Sie beispielsweise einen list Typ als Index verwenden, können Sie keine indizierte Suche nach einem Element in der Liste durchführen.

  • Die Abfrageleistung wird nur verbessert, wenn Sie ein Gleichheitsprädikat verwenden, WHERE indexedField = 123 z. B. oder. WHERE indexedField IN (456, 789)

    QLDBberücksichtigt Ungleichheiten in Abfrageprädikaten nicht. Aus diesem Grund werden bereichsgefilterte Scans nicht implementiert.

  • Bei Namen indizierter Felder wird zwischen Groß- und Kleinschreibung unterschieden und sie können maximal 128 Zeichen lang sein.

  • Die Indexerstellung in QLDB ist asynchron. Die Zeit, die benötigt wird, um die Erstellung eines Indexes für eine nicht leere Tabelle abzuschließen, hängt von der Tabellengröße ab. Weitere Informationen finden Sie unter Verwalten von Indexen.

Beschreibung von Indizes

Die Indexerstellung in QLDB ist asynchron. Die Zeit, die benötigt wird, um die Erstellung eines Indexes für eine nicht leere Tabelle abzuschließen, hängt von der Tabellengröße ab. Um den Status einer Indexerstellung zu überprüfen, können Sie die Systemkatalogtabelle information_schema.user_tables abfragen.

Mit der folgenden Anweisung wird beispielsweise der Systemkatalog nach allen Indizes in der Tabelle abgefragt. VehicleRegistration

SELECT VALUE indexes FROM information_schema.user_tables info, info.indexes indexes WHERE info.name = 'VehicleRegistration'
{
    indexId: "Djg2nt0yIs2GY0T29Kud1z",
    expr: "[VIN]",
    status: "ONLINE"
},
{
    indexId: "4tPW3fUhaVhDinRgKRLhGU",
    expr: "[LicensePlateNumber]",
    status: "FAILED",
    message: "aws.ledger.errors.InvalidEntityError: Document contains multiple values for indexed field: LicensePlateNumber"
}
Indexfelder
  • indexId— Die eindeutige ID des Indexes.

  • expr— Der indizierte Dokumentpfad. Dieses Feld ist eine Zeichenfolge in der Form:[fieldName].

  • status— Der aktuelle Status des Index. Der Status eines Indexes kann einer der folgenden Werte sein:

    • BUILDING— Erstellt aktiv den Index für die Tabelle.

    • FINALIZING— Hat die Erstellung des Indexes abgeschlossen und beginnt, ihn für die Verwendung zu aktivieren.

    • ONLINE— Ist aktiv und kann in Abfragen verwendet werden. QLDBverwendet den Index erst in Abfragen, wenn der Status online ist.

    • FAILED— Der Index kann aufgrund eines nicht behebbaren Fehlers nicht erstellt werden. Indizes in diesem Status werden immer noch auf Ihr Indexkontingent pro Tabelle angerechnet. Weitere Informationen finden Sie unter Häufige Fehler.

    • DELETING— Löscht aktiv den Index, nachdem ein Benutzer ihn gelöscht hat.

  • message— Die Fehlermeldung, die den Grund beschreibt, warum der Index einen FAILED Status hat. Dieses Feld ist nur für fehlgeschlagene Indizes enthalten.

Sie können den auch verwenden AWS Management Console , um den Status eines Indexes zu überprüfen.

Um den Status eines Indexes zu überprüfen (Konsole)
  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die QLDB Amazon-Konsole unter https://console.aws.amazon.com/qldb.

  2. Wählen Sie im Navigationsbereich Ledgers aus.

  3. Wählen Sie in der Liste der Ledger den Ledger-Namen aus, dessen Indizes Sie verwalten möchten.

  4. Wählen Sie auf der Seite mit den Ledger-Details auf der Registerkarte Tabellen den Tabellennamen aus, dessen Index Sie überprüfen möchten.

  5. Suchen Sie auf der Seite mit den Tabellendetails die Karte Indizierte Felder. In der Spalte Indexstatus wird der aktuelle Status jedes Indexes in der Tabelle angezeigt.

Indizes löschen

Verwenden Sie die DROP INDEX Anweisung, um einen Index zu löschen. Wenn Sie einen Index löschen, wird er dauerhaft aus der Tabelle gelöscht.

Suchen Sie zunächst die Index-ID voninformation_schema.user_tables. Die folgende Abfrage gibt beispielsweise den Wert indexId des indizierten LicensePlateNumber Felds in der VehicleRegistration Tabelle zurück.

SELECT indexes.indexId FROM information_schema.user_tables info, info.indexes indexes WHERE info.name = 'VehicleRegistration' and indexes.expr = '[LicensePlateNumber]'

Verwenden Sie dann diese ID, um den Index zu löschen. Im Folgenden finden Sie ein Beispiel, bei dem die Index-ID gelöscht wird4tPW3fUhaVhDinRgKRLhGU. Die Index-ID ist ein eindeutiger Bezeichner, der in doppelte Anführungszeichen eingeschlossen werden sollte.

DROP INDEX "4tPW3fUhaVhDinRgKRLhGU" ON VehicleRegistration WITH (purge = true)
Anmerkung

Die Klausel WITH (purge = true) ist für alle DROP INDEX Anweisungen erforderlich und true ist derzeit der einzige unterstützte Wert.

Das Schlüsselwort purge unterscheidet zwischen Groß- und Kleinschreibung und muss ausschließlich aus Kleinbuchstaben bestehen.

Sie können den auch verwenden AWS Management Console , um einen Index zu löschen.

Um einen Index zu löschen (Konsole)
  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die QLDB Amazon-Konsole unter https://console.aws.amazon.com/qldb.

  2. Wählen Sie im Navigationsbereich Ledgers aus.

  3. Wählen Sie in der Liste der Ledger den Ledger-Namen aus, dessen Indizes Sie verwalten möchten.

  4. Wählen Sie auf der Seite mit den Ledger-Details auf der Registerkarte Tabellen den Tabellennamen aus, dessen Index Sie löschen möchten.

  5. Suchen Sie auf der Seite mit den Tabellendetails die Karte Indizierte Felder. Wählen Sie den Index aus, den Sie löschen möchten, und wählen Sie dann Index löschen aus.

Häufige Fehler

In diesem Abschnitt werden häufig auftretende Fehler beschrieben, die beim Erstellen von Indizes auftreten können, und es werden mögliche Lösungen vorgeschlagen.

Anmerkung

Indizes mit dem Status „FAILEDImmer noch“ werden auf Ihr Indexkontingent pro Tabelle angerechnet. Ein fehlgeschlagener Index verhindert auch, dass Sie Dokumente ändern oder löschen, die dazu geführt haben, dass die Indexerstellung für die Tabelle fehlgeschlagen ist.

Sie müssen den Index explizit löschen, um ihn aus dem Kontingent zu entfernen.

Das Dokument enthält mehrere Werte für das indizierte Feld: fieldName.

QLDBkann keinen Index für den angegebenen Feldnamen erstellen, da die Tabelle ein Dokument mit mehreren Werten für dasselbe Feld enthält (d. h. doppelte Feldnamen).

Sie müssen zuerst den fehlgeschlagenen Index löschen. Stellen Sie dann sicher, dass alle Dokumente in der Tabelle nur einen Wert für jeden Feldnamen haben, bevor Sie erneut versuchen, den Index zu erstellen. Sie können auch einen Index für ein anderes Feld erstellen, das keine Duplikate enthält.

QLDBgibt diesen Fehler auch zurück, wenn Sie versuchen, ein Dokument einzufügen, das mehrere Werte für ein Feld enthält, das bereits in der Tabelle indexiert ist.

Indexlimit überschritten: Tabelle tableName hat schon n Indizes und kann keine weiteren erstellen.

QLDBerzwingt ein Limit von fünf Indizes pro Tabelle, einschließlich fehlgeschlagener Indizes. Sie müssen einen vorhandenen Index löschen, bevor Sie einen neuen erstellen können.

Kein definierter Index mit ID: indexId.

Sie haben versucht, einen Index zu löschen, der für die angegebene Kombination aus Tabelle und Index-ID nicht existiert. Informationen zum Überprüfen vorhandener Indizes finden Sie unterBeschreibung von Indizes.