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

In questa sezione viene descritto come creare, descrivere ed eliminare indici in Amazon QLDB. La quota per il numero di indici per tabella che puoi creare è definita inQuote 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 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 individuare l'ID dell'indice, consulta la sezione seguenteDescrizione degli 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 clausolaWHERE predicativa utilizzando un operatore di uguaglianza (=oIN) su un campo indicizzato o un ID di documento. Per ulteriori informazioni, consulta Ottimizzazione delle prestazioni delle query.

Nota 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, inclusilist estruct. Tuttavia, è possibile eseguire la ricerca indicizzata solo in base all'uguaglianza dell'intero valore Ion indipendentemente dal tipo di Ion. Ad esempio, quando si utilizza unlist tipo come indice, non è possibile eseguire una ricerca indicizzata per un elemento all'interno dell'elenco.

  • Le prestazioni delle query migliorano solo quando si utilizza un predicato di uguaglianza, ad esempioWHERE indexedField = 123 oWHERE indexedField IN (456, 789).

    QLDB non rispetta le disuguaglianze nei predicati delle query. Di conseguenza, le scansioni filtrate per intervallo non vengono implementate.

  • I nomi dei campi indicizzati fanno distinzione tra maiuscole e può contenere fino a 128 caratteri.

  • La creazione di indici in QLDB è asincrona. La quantità di tempo necessaria 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.

Descrizione degli indici

La creazione di indici in QLDB è asincrona. La quantità di tempo necessaria 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 generazione di indice, è possibile 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 dellaVehicleRegistration tabella.

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ò avere 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 nella quota di indici per tabella. Per ulteriori informazioni, consulta Errori comuni.

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

  • message— Il messaggio di errore che descrive il motivo per cui l'indice ha unoFAILED stato. Questo campo è incluso se non è valido.

Puoi inoltre utilizzareAWS Management Console per verificare lo stato di un indice.

Verifica dello stato di un indice (console)
  1. Accedere allaAWS Management Console e aprire la console Amazon QLDB all'indirizzo https://console.aws.amazon.com/qldb.

  2. Nel riquadro di navigazione, seleziona Registri.

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

  4. Nella pagina dei dettagli del libro contabile, 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.

Abbassamento 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 valoreindexId delLicensePlateNumber campo indicizzato dellaVehicleRegistration tabella.

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

Quindi, usa 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.

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

La clausolaWITH (purge = true) è obbligatoria per tutte leDROP INDEX istruzioni edtrue è attualmente l'unico valore supportato.

La parola chiavepurge fa distinzione tra maiuscole e minuscole e deve essere interamente in caratteri minuscoli.

Puoi anche usare ilAWS Management Console per eliminare un indice.

Per eliminare un indice (console)
  1. Accedere allaAWS Management Console e aprire la console Amazon QLDB all'indirizzo https://console.aws.amazon.com/qldb.

  2. Nel riquadro di navigazione, seleziona Registri.

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

  4. Nella pagina dei dettagli del libro contabile, 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 lo statoFAILED ancora vengono 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 nella 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 del campo specificato perché la tabella contiene un documento con più valori per lo stesso campo (ovvero nomi di campo duplicati).

È necessario innanzitutto eliminare l'indice non riuscito. Quindi, assicurati che tutti i documenti nella 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 che non ha 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: Table TableName ha già n indici e non può crearne altri.

QLDB impone un limite di cinque indici per tabella, inclusi gli indici con errori. È 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 di tabella e ID indice specificata. Per informazioni su come controllare gli indici esistenti, consultaDescrizione degli indici.