Panoramica degli indici

Questa pagina descrive l'indicizzazione per Firestore con compatibilità MongoDB. Firestore con compatibilità MongoDB non crea indici per impostazione predefinita. Per migliorare le prestazioni del database, crea indici per le query più utilizzate.

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

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 e multikey.

Ordinamento dell'indice

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
cities paese (crescente), popolazione (decrescente)
cities popolazione (in ordine decrescente), paese (in 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 dell'indice memorizzano i dati di tutti i documenti di una raccolta. Questo è conosciuto come indice non sparso. A un documento verrà aggiunta una voce dell'indice indipendentemente dal fatto che il documento contenga o meno uno dei campi specificati nell'indice. I campi inesistenti vengono considerati come aventi 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 della 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 multikey per i valori degli array

Se stai creando un indice su un campo che contiene valori di array, devi creare un indice multichiave. Un indice normale non può indicizzare i valori degli array. Un indice multichiave supporta fino a un campo array nella definizione dell'indice e può essere utilizzato per le operazioni che attraversano i valori dell'array.

Utilizza gli indici multichiave solo se sai di dover indicizzare i valori dell'array. Gli indici regolari presentano vantaggi durante l'elaborazione di una query. Ad esempio, gli indici regolari possono filtrare i valori all'interno di un intervallo in modo più efficiente.

Le seguenti situazioni generano errori quando si utilizzano valori di array e indici multikey:

  • Un'operazione tenta di aggiungere un valore di array a un campo indicizzato da un indice regolare. Per aggiungere il valore dell'array, devi eliminare gli indici regolari esistenti su quel campo e ricrearli come indici multikey.
  • Stai tentando di creare un indice normale in un campo contenente un valore آرایه. Devi creare un indice multichiave o eliminare i valori dell'array.
  • Un'operazione tenta di indicizzare più campi con valori di array. Non puoi avere più di un campo con un valore array in un indice multichiave. Per procedere, modifica il modello di dati o le definizioni degli indici.
  • Stai tentando di creare un indice multichiave in cui due percorsi dei campi condividono un prefisso comune come users.posts e users.zip.

Risolvere i problemi relativi alla creazione dell'indice

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

  • Hai raggiunto un limite di indici. 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 indici, riprova l'operazione di indice.
  • È necessario un indice multichiave. Almeno uno dei campi indicizzati contiene un valore di array. Per procedere, devi utilizzare un indice multichiave o eliminare i valori dell'array.
  • Un'operazione tenta di indicizzare più campi con valori di array. Non puoi avere più di un campo con un valore array in un indice multichiave. Per procedere, modifica il modello di dati o le definizioni degli indici.

Passaggi successivi