Gestione degli indici - Database Amazon Quantum Ledger (Amazon QLDB)

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Gestione degli indici

Importante

Avviso di fine del supporto: i clienti esistenti potranno utilizzare Amazon QLDB fino alla fine del supporto, il 31/07/2025. Per ulteriori dettagli, consulta Migrare un registro Amazon QLDB su Amazon Aurora PostgreSQL.

Questa sezione descrive come creare, descrivere ed eliminare indici in Amazon QLDB. La quota per il numero di indici per tabella che è possibile creare è definita in. Quote e limiti in Amazon QLDB

Creazione di indici

Come descritto anche inCreazione di tabelle e indici, è possibile utilizzare l'istruzione CREATE INDEX per creare un indice su una tabella per un campo di primo livello specificato, come segue. Il nome della tabella e il nome del campo indicizzato fanno entrambi distinzione tra maiuscole e minuscole.

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

Ogni indice creato su una tabella ha un ID univoco assegnato dal sistema. Per trovare questo ID di indice, consulta la sezione seguente. Descrivere gli indici

Importante

QLDB richiede un indice per cercare in modo efficiente un documento. Senza un indice, QLDB deve eseguire una scansione completa della tabella durante la lettura dei documenti. Ciò può causare problemi di prestazioni su tabelle di grandi dimensioni, inclusi conflitti di concorrenza e timeout delle transazioni.

Per evitare la scansione delle tabelle, è necessario eseguire istruzioni con una clausola di WHERE predicato utilizzando un operatore di uguaglianza (=oIN) su un campo indicizzato o un ID di documento. Per ulteriori informazioni, consulta Ottimizzazione delle prestazioni delle query.

Tenete presente i seguenti vincoli durante la creazione degli indici:

  • Un indice può essere creato solo su un singolo campo di primo livello. Gli indici compositi, annidati, unici e basati su funzioni non sono supportati.

  • È possibile creare un indice su qualsiasi tipo di dati Ion, inclusi e. list struct Tuttavia, è possibile eseguire la ricerca indicizzata solo in base all'uguaglianza dell'intero valore Ion indipendentemente dal tipo di ione. Ad esempio, quando si utilizza un list tipo come indice, non è possibile eseguire una ricerca indicizzata per un elemento all'interno dell'elenco.

  • Le prestazioni delle query sono migliorate solo quando si utilizza un predicato di uguaglianza; ad esempio, o. WHERE indexedField = 123 WHERE indexedField IN (456, 789)

    QLDB non rispetta le disuguaglianze nei predicati delle query. Di conseguenza, le scansioni con filtro per intervallo non sono implementate.

  • I nomi dei campi indicizzati fanno distinzione tra maiuscole e minuscole e possono contenere un massimo di 128 caratteri.

  • La creazione dell'indice in QLDB è asincrona. Il tempo necessario per completare la creazione di un indice su una tabella non vuota varia a seconda delle dimensioni della tabella. Per ulteriori informazioni, consulta Gestione degli indici.

Descrivere gli indici

La creazione dell'indice in QLDB è asincrona. Il tempo necessario per completare la creazione di un indice su una tabella non vuota varia a seconda delle dimensioni della tabella. Per verificare lo stato di una compilazione dell'indice, puoi interrogare la tabella del catalogo di sistema information_schema.user_tables.

Ad esempio, l'istruzione seguente interroga il catalogo di sistema per tutti gli indici della tabella. 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"
}
Campi dell'indice
  • indexId— L'ID univoco dell'indice.

  • expr— Il percorso indicizzato del documento. Questo campo è una stringa nel formato:. [fieldName]

  • status— Lo stato attuale dell'indice. Lo stato di un indice può corrispondere a uno dei seguenti valori:

    • BUILDING— Sta creando attivamente l'indice per la tabella.

    • FINALIZING— Ha terminato la creazione dell'indice e sta iniziando ad attivarlo per l'uso.

    • ONLINE— È attivo e pronto per l'uso nelle interrogazioni. QLDB non utilizza l'indice nelle query finché lo stato non è online.

    • FAILED— Non è in grado di creare l'indice a causa di un errore irreversibile. Gli indici in questo stato vengono ancora conteggiati ai fini della quota di indici per tabella. Per ulteriori informazioni, consulta Errori comuni.

    • DELETING— Elimina attivamente l'indice dopo che un utente lo ha eliminato.

  • message— Il messaggio di errore che descrive il motivo per cui l'indice ha uno FAILED stato. Questo campo è incluso solo per gli indici non riusciti.

Puoi anche usare il AWS Management Console per controllare lo stato di un indice.

Per controllare lo stato di un indice (console)
  1. Accedi a e apri AWS Management Console la console Amazon QLDB all'indirizzo /qldb. https://console.aws.amazon.com

  2. Nel pannello di navigazione, scegli Ledgers.

  3. Nell'elenco dei libri contabili, scegli il nome del libro contabile di cui desideri gestire gli indici.

  4. Nella pagina dei dettagli del registro, nella scheda Tabelle, scegli il nome della tabella di cui desideri controllare l'indice.

  5. Nella pagina dei dettagli della tabella, individua la scheda Campi indicizzati. La colonna Stato dell'indice mostra lo stato corrente di ogni indice della tabella.

Eliminazione degli indici

Usa l'DROP INDEXistruzione per eliminare un indice. Quando si elimina un indice, questo viene eliminato definitivamente dalla tabella.

Innanzitutto, trova l'ID dell'indice dainformation_schema.user_tables. Ad esempio, la seguente query restituisce il indexId LicensePlateNumber campo indicizzato della VehicleRegistration tabella.

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

Quindi, utilizzate questo ID per eliminare l'indice. Di seguito è riportato un esempio che elimina l'ID dell'indice4tPW3fUhaVhDinRgKRLhGU. L'ID dell'indice è un identificatore univoco che deve essere racchiuso tra virgolette doppie.

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

La clausola WITH (purge = true) è obbligatoria per tutte le DROP INDEX istruzioni ed true è attualmente l'unico valore supportato.

La parola chiave purge fa distinzione tra maiuscole e minuscole e deve essere tutta minuscola.

Puoi anche usare il AWS Management Console per eliminare un indice.

Eliminare un indice (console)
  1. Accedi a e apri AWS Management Console la console Amazon QLDB all'indirizzo /qldb. https://console.aws.amazon.com

  2. Nel pannello di navigazione, scegli Ledgers.

  3. Nell'elenco dei libri contabili, scegli il nome del libro contabile di cui desideri gestire gli indici.

  4. Nella pagina dei dettagli del registro, nella scheda Tabelle, scegli il nome della tabella di cui desideri eliminare l'indice.

  5. Nella pagina dei dettagli della tabella, individua la scheda Campi indicizzati. Seleziona l'indice che desideri eliminare, quindi scegli Elimina indice.

Errori comuni

Questa sezione descrive gli errori più comuni che potresti riscontrare durante la creazione di indici e suggerisce possibili soluzioni.

Nota

Gli indici con uno stato pari a vengono FAILED comunque conteggiati nella quota di indici per tabella. Un indice non riuscito impedisce inoltre di modificare o eliminare i documenti che hanno causato il fallimento della creazione dell'indice sulla tabella.

È necessario eliminare esplicitamente l'indice per rimuoverlo dalla quota.

Il documento contiene più valori per il campo indicizzato:. fieldName

QLDB non è in grado di creare un indice per il nome di campo specificato perché la tabella contiene un documento con più valori per lo stesso campo (ovvero nomi di campo duplicati).

È innanzitutto necessario eliminare l'indice fallito. Quindi, assicurati che tutti i documenti della tabella abbiano un solo valore per ogni nome di campo prima di riprovare a creare l'indice. Puoi anche creare un indice per un altro campo senza duplicati.

QLDB restituisce questo errore anche se si tenta di inserire un documento che contiene più valori per un campo già indicizzato nella tabella.

Limite di indici superato: la tabella contiene tableName n già indici e non può crearne altri.

QLDB impone un limite di cinque indici per tabella, inclusi gli indici non riusciti. È necessario eliminare un indice esistente prima di crearne uno nuovo.

Nessun indice definito con identificatore:indexId.

Hai provato a eliminare un indice che non esiste per la combinazione specificata di tabella e ID indice. Per informazioni su come controllare gli indici esistenti, consulta. Descrivere gli indici