Panoramica dell'indice

Questa sezione descrive l'indicizzazione per Cloud Firestore Enterprise Edition. Cloud Firestore Enterprise Edition non crea indici per impostazione predefinita. Per migliorare le prestazioni del database, crea indici per le query più utilizzate.

Gli indici hanno un impatto significativo sulle prestazioni di un database. Se esiste un indice per una query, il database può restituire in modo efficiente i risultati riducendo la quantità di dati da scansionare e il lavoro necessario per ordinare i risultati. Tuttavia, le voci di indice aumentano i costi di archiviazione e la quantità di lavoro eseguito durante un'operazione di scrittura sui campi indicizzati.

Differenze tra le versioni

La seguente tabella offre una panoramica delle principali differenze di indicizzazione tra Cloud Firestore Standard e Cloud Firestore Enterprise.

Funzionalità Cloud Firestore Standard edition Cloud Firestore Enterprise
Requisito di indicizzazione Tutte le query richiedono indici per l'esecuzione. Le query sono generalmente efficienti grazie a questo requisito. Gli indici non sono obbligatori per le query. Sono possibili letture non indicizzate, il che elimina un ostacolo alla prototipazione.
Indicizzazione automatica Per impostazione predefinita, gli indici a un solo campo vengono creati automaticamente per tutti i campi all'interno dei documenti. Nessun indice automatico. Devi gestire manualmente tutti gli indici.
Densità dell'indice Sparse per impostazione predefinita. Un documento in un gruppo di raccolte viene indicizzato solo se contiene un valore per ogni campo indicizzato. Non sparse per impostazione predefinita. Tutti i documenti nel gruppo di raccolte sono indicizzati. I campi indicizzati senza un valore sono impostati su NULL. Il comportamento può essere modificato con l'opzione di indice sparso.
Opzioni e tipi di indice supportati
  • A campo singolo (indici automatici)
  • Indici composti
  • Ambito della raccolta o del gruppo di raccolte
  • array-contains
  • Vettoriale
  • Ambito della raccolta o del gruppo di raccolte
  • Densità dell'indice non sparso o sparso
  • array-contains
  • Vettoriale
  • Indici unici

Definizione e struttura dell'indice

Un indice è costituito da quanto segue:

  • un ID raccolta
  • un elenco di campi nella raccolta specificata
  • un ordine, crescente o decrescente, per ogni campo

Un indice può anche attivare le opzioni sparse o unique.

Ordinamento degli indici

L'ordine e la direzione di ordinamento di ogni campo definiscono in modo univoco l'indice. Ad esempio, i seguenti indici sono due indici distinti e non intercambiabili:

Raccolta Campi
città paese (ordine crescente), popolazione (ordine decrescente)
città popolazione (ordine decrescente), paese (ordine crescente)

Quando crei un indice per supportare una query, includi i campi nello stesso ordine della query.

Densità dell'indice

Per impostazione predefinita, le voci di indice archiviano i dati di tutti i documenti di una raccolta. Questo è noto come indice non sparso. Una voce di indice verrà aggiunta per un documento indipendentemente dal fatto che il documento contenga uno dei campi specificati nell'indice. I campi inesistenti vengono trattati come se avessero un valore NULL durante la generazione delle voci dell'indice. Per modificare questo comportamento, puoi definire l'indice come indice sparso.

Indici sparsi

Un indice sparso indicizza solo i documenti nella raccolta che contengono un valore (incluso null) per almeno uno dei campi indicizzati. Un indice sparso riduce i costi di archiviazione e può migliorare le prestazioni.

Indici unici

Imposta l'opzione di indice unico per applicare valori unici per i campi indicizzati. Per gli indici su più campi, ogni combinazione di valori deve essere univoca nell'indice. Il database rifiuta qualsiasi operazione di aggiornamento e inserimento che tenta di creare voci di indice con valori duplicati. Se i dati dei campi indicizzati contengono valori duplicati e tenti di creare un indice univoco, la creazione dell'indice non va a buon fine e viene visualizzato un messaggio di errore nei dettagli dell'operazione.

Campi assenti in un indice univoco

Se inserisci un documento con campi mancanti per l'indice univoco, l'indice imposta i valori null per i campi mancanti. La voce di indice risultante deve essere univoca, altrimenti l'operazione non va a buon fine.

Ad esempio, con questo indice:

Raccolta Campi indicizzati Ambito di query
città name (crescente) Raccolta

Se aggiungi il documento {"abbreviation": "LA"} alla raccolta, l'indice univoco crea una voce con name impostato su null. Se poi provi ad aggiungere il documento {"abbreviation": "NYC"}, l'operazione non va a buon fine perché la voce risultante per l'indice univoco è la stessa.

Lo stesso comportamento si applica agli indici univoci con più campi. Quando crei o aggiorni un documento, i campi indicizzati mancanti vengono impostati su null e la voce di indice risultante deve essere univoca nell'indice.

Risolvere i problemi relativi agli errori di creazione dell'indice

Potresti riscontrare errori di creazione dell'indice durante la gestione degli indici. Un'operazione di indicizzazione può non riuscire se il database rileva un problema con i dati. Le operazioni di indicizzazione possono non riuscire per i seguenti motivi:

  • Hai raggiunto un limite di indice. Ad esempio, l'operazione potrebbe aver raggiunto il numero massimo di voci di indice per documento. Se la creazione dell'indice non riesce, viene visualizzato un messaggio di errore. Se non hai raggiunto un limite di indice, riprova l'operazione di indicizzazione.
  • Imposti l'opzione di indice univoco e i dati dei campi indicizzati creano voci di indice duplicate. Per procedere, rimuovi le combinazioni duplicate di valori dai dati.

Passaggi successivi

Scopri come creare e gestire gli indici.