Verwalten von Indexen - Amazon Quantum Ledger Database (Amazon QLDB)

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

Dieser Abschnitt beschreibt, wie Sie Indizes in Amazon QLDB erstellen, beschreiben und löschen. Die Kontingente für Anzahl der Indizes pro Tabelle, die Sie erstellen können, ist in definiertKontingente und Limits in Amazon QLDB.

Erstellen von Indizes

Wie auch unter beschriebenErstellen von Tabellen und Indizes, können Sie die CREATE INDEX-Anweisung verwenden, um einen Index für eine Tabelle für ein bestimmtes Feld der obersten Ebene wie folgt zu erstellen. Sowohl der Tabellenname als auch der indizierte Feldname unterscheiden zwischen Groß- und Kleinschreibung.

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. Weitere Informationen zu dieser Index-ID finden Sie im folgenden AbschnittBeschreiben von Indizes.

Wichtig

QLDB benötigt einen Index, um ein Dokument effizient nachschlagen zu können. Ohne Index muss QLDB beim Lesen von Dokumenten einen vollständigen Tabellenscan durchführen. 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 einerWHERE Prädikatklausel unter Verwendung eines Gleichheitsoperators (=oderIN) für ein indiziertes Feld oder eine Dokument-ID ausführen. Weitere Informationen finden Sie unter Optimieren 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ßlichlist undstruct. Sie können die indizierte Suche jedoch nur nach Gleichheit des gesamten Ionenwerts durchführen, unabhängig vom Ionentyp. Wenn Sie beispielsweise einenlist 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, z. B.WHERE indexedField = 123 oderWHERE indexedField IN (456, 789).

    QLDB berücksichtigt keine Ungleichungen in Abfrageprädikaten. Daher werden bereichsgefilterte Scans nicht implementiert.

  • Bei Namen von indizierten Feldern muss zwischen Groß- und Kleinschreibung unterschieden werden. Sie dürfen höchstens 128 Zeichen lang sein.

  • Die Indexerstellung in QLDB erfolgt asynchron. Die Zeit, die zum Erstellen eines Index für eine nicht leere Tabelle benötigt wird, hängt von der Tabellengröße ab. Weitere Informationen finden Sie unter Verwalten von Indexen.

Beschreiben von Indizes

Die Indexerstellung in QLDB erfolgt asynchron. Die Zeit, die zum Erstellen eines Index für eine nicht leere Tabelle benötigt wird, 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 derVehicleRegistration Tabelle abgefragt.

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 Index.

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

  • status— Der aktuelle Status des Index. Der Status eines Index kann einen der folgenden Werte haben:

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

    • FINALIZING— Hat den Index erstellt und beginnt, ihn für die Verwendung zu aktivieren.

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

    • FAILED— Der Index kann aufgrund eines nicht behebbaren Fehlers nicht erstellt werden. Indizes in diesem Status werden weiterhin 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 einenFAILED Status hat. Dieses Feld ist nur für fehlgeschlagene Indizes enthalten.

Sie können auch den verwendenAWS Management Console, um den Status eines Index zu überprüfen.

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

  2. Wählen Sie im Navigationsbereich Ledgers aus.

  3. Wählen Sie in der Liste der Bücher den Namen des Buchs aus, dessen Indizes Sie verwalten möchten.

  4. Wählen Sie auf der Seite mit den Buchdetails 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 der einzelnen Indizes in der Tabelle angezeigt.

Indizes löschen

Verwenden Sie dieDROP 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 WertindexId des indiziertenLicensePlateNumber Felds in derVehicleRegistration 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 ID, der in doppelte Anführungszeichen gesetzt werden sollte.

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

Die KlauselWITH (purge = true) ist für alleDROP INDEX Anweisungen erforderlich undtrue ist derzeit der einzige unterstützte Wert.

Bei diesem Schlüsselwort musspurge es sich um Kleinbuchstaben handeln.

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

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

  2. Wählen Sie im Navigationsbereich Ledgers aus.

  3. Wählen Sie in der Liste der Bücher den Namen des Buchs aus, dessen Indizes Sie verwalten möchten.

  4. Wählen Sie auf der Seite mit den Buchdetails 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.

Häufige Fehler

In diesem Abschnitt werden häufige Fehler beschrieben, die bei der Erstellung von Indizes auftreten können, und mögliche Lösungen vorgeschlagen.

Anmerkung

Indizes mit dem Status von werdenFAILED immer noch auf Ihr Indexkontingent pro Tabelle angerechnet. Ein fehlerhafter 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.

QLDB kann 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 fehlerhaften 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.

QLDB gibt 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: Table TableName hat bereits n Indizes und kann keine weiteren erstellen.

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

Kein definierter Index mit dem Bezeichner: 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 unterBeschreiben von Indizes.