Panoramica dell'indicizzazione

Gli indici sono un fattore importante per le prestazioni di un database. Proprio come l'indice di un libro che mappa gli argomenti di un libro ai numeri di pagina, un indice del database mappa gli elementi di un database alle relative posizioni nel database. Quando invii una query a un database, quest'ultimo può utilizzare un indice per cercare rapidamente le posizioni degli elementi che hai richiesto.

In questa pagina vengono descritti i due tipi di indici utilizzati da Firestore: indici a campo singolo e indici composti.

Definizione e struttura dell'indice

Un indice viene definito su un elenco di campi di un determinato documento, con una modalità indice corrispondente per ogni campo.

Un indice contiene una voce per ogni campo denominato nella definizione dell'indice. L'indice include tutti i documenti che rappresentano i potenziali risultati per le query basate sull'indice. Un documento viene incluso nell'indice solo se ha un valore indicizzato impostato per ogni campo utilizzato nell'indice; se la definizione dell'indice si riferisce a un campo per il quale non è stato impostato alcun valore, il documento non verrà visualizzato nell'indice e, pertanto, non verrà mai restituito come risultato per qualsiasi query basata sull'indice.

L'indice composto viene ordinato in base ai valori dei campi, nell'ordine specificato nella definizione dell'indice.

Un indice dietro ogni query

Se non esiste alcun indice per una query, la maggior parte dei database esegue la scansione dei contenuti elemento per elemento, un processo lento che rallenta ancora di più man mano che il database cresce. Firestore garantisce prestazioni elevate con le query utilizzando indici per tutte le query. Di conseguenza, le prestazioni delle query dipendono dalla dimensione del set di risultati e non dal numero di elementi nel database.

Meno gestione dell'indice, più sviluppo di app

Firestore include funzionalità che riducono il tempo necessario per la gestione degli indici. Gli indici necessari per le query più basilari vengono creati automaticamente per te. Durante l'utilizzo e il test della tua app, Firestore ti aiuta a identificare e creare indici aggiuntivi richiesti dalla tua app.

Tipi di indice

Firestore utilizza due tipi di indici: campo singolo e composito. Oltre al numero di campi indicizzati, gli indici a campo singolo e compositi differiscono nel modo in cui vengono gestiti.

Indici a campo singolo

Un indice a campo singolo archivia una mappatura ordinata di tutti i documenti di una raccolta contenente un campo specifico. Ogni voce in un indice a campo singolo registra il valore di un documento per un campo specifico e la posizione del documento nel database. Firestore usa questi indici per eseguire molte query di base. Puoi gestire gli indici a campo singolo configurando le impostazioni dell'indicizzazione automatica e le esenzioni degli indici del tuo database.

Indicizzazione automatica

Per impostazione predefinita, Firestore gestisce automaticamente gli indici a campo singolo per ogni campo di un documento e per ogni campo secondario di una mappa. Firestore utilizza le seguenti impostazioni predefinite per gli indici a campo singolo:

  • Per ogni campo non array e non mappa, Firestore definisce due indici a campo singolo collection-scope, uno in modalità crescente e uno in modalità decrescente.

  • Per ogni campo della mappa, Firestore crea quanto segue:

    • Un indice crescente con ambito di raccolta per ogni sottocampo non array e non mappa.
    • Un indice decrescente con ambito di raccolta per ogni sottocampo non array e non di mappa.
    • Un array con ambito di raccolta contiene un indice per ogni sottocampo dell'array.
    • Firestore indicizza in modo ricorsivo ogni sottocampo della mappa.
  • Per ogni campo di array in un documento, Firestore crea e gestisce un indice collection-scope array-contains.

  • Gli indici a campo singolo con ambito del gruppo di raccolte non sono gestiti per impostazione predefinita.

Esenzioni dell'indice a campo singolo

Puoi escludere un campo dalle impostazioni di indicizzazione automatica creando un'esenzione dell'indice a campo singolo. Un'esenzione dell'indicizzazione esegue l'override delle impostazioni dell'indice automatico a livello di database. Un'esenzione può abilitare un indice a campo singolo che le impostazioni di indicizzazione automatica disabiliteranno o disabiliteranno altrimenti un indice a campo singolo che altrimenti verrebbe abilitato dall'indicizzazione automatica. Per i casi in cui le esenzioni possono essere utili, consulta le best practice di indicizzazione.

Utilizza il valore del percorso del campo * per aggiungere esenzioni degli indici a livello di raccolta in tutti i campi di un gruppo di raccolte. Ad esempio, per il gruppo di raccolte comments, imposta il percorso del campo su * in modo che corrisponda a tutti i campi del gruppo di raccolte comments e disabilita l'indicizzazione di tutti i campi nel gruppo di raccolte. Puoi quindi aggiungere esenzioni all'indicizzazione solo dei campi obbligatori per le query. La riduzione del numero di campi indicizzati riduce i costi di archiviazione e può migliorare le prestazioni di scrittura.

Se crei un'esenzione dell'indice a campo singolo per un campo della mappa, i sottocampi della mappa ereditano queste impostazioni. Per campi secondari specifici, puoi definire esenzioni degli indici a campo singolo. Se elimini un'esenzione per un campo secondario, il campo secondario erediterà le impostazioni di esenzione dell'elemento principale, se presenti, o le impostazioni a livello di database, se non esistono esenzioni padre.

Per creare e gestire le esenzioni degli indici a campo singolo, vedi Gestire gli indici in Firestore.

Indici composti

Un indice composto archivia una mappatura ordinata di tutti i documenti di una raccolta, in base a un elenco ordinato di campi da indicizzare.

Firestore usa indici composti per supportare le query non ancora supportate dagli indici a campo singolo.

Firestore non crea automaticamente indici composti come avviene per gli indici a campo singolo a causa dell'elevato numero di possibili combinazioni di campi. Firestore, invece, ti aiuta a identificare e creare gli indici composti richiesti durante la creazione dell'app.

Ogni volta che tenti di eseguire una query non supportata da un indice, Firestore restituisce un messaggio di errore con un link che puoi seguire per creare l'indice mancante.

Puoi anche definire e gestire gli indici composti manualmente utilizzando la console o l'interfaccia a riga di comando di Firebase. Per ulteriori informazioni sulla creazione e sulla gestione degli indici composti, consulta Gestione degli indici.

Modalità di indicizzazione e ambiti delle query

Puoi configurare gli indici a campo singolo e composti in modo diverso, ma entrambi richiedono la configurazione di modalità di indice e ambiti di query per i tuoi indici.

Modalità indice

Quando definisci un indice, seleziona una modalità di indice per ogni campo indicizzato. La modalità di indice di ogni campo supporta clausole di query specifiche su quel campo. Puoi scegliere tra le seguenti modalità di indice:

Modalità indice Descrizione
Crescente Supporta <, <=, ==, >=, >, !=, in e not-in, clausole di query sul campo e l'ordinamento dei risultati in ordine crescente in base al valore di questo campo.
Decrescente Supporta le clausole di query <, <=, ==, >=, >, !=, in e not-in sul campo e supporta l'ordinamento dei risultati in ordine decrescente in base al valore di questo campo.
Array‐contiene Supporta le clausole di query array-contains e array-contains-any sul campo.
Vector Supporta le clausole di query FindNearest sul campo.

Ambiti di query

Ogni indice ha come ambito una raccolta o un gruppo di raccolte. Questo è noto come ambito delle query dell'indice:

Ambito della raccolta
Firestore crea indici con ambito di raccolta per impostazione predefinita. Questi indici supportano query che restituiscono i risultati da una singola raccolta.

Ambito del gruppo di raccolte
Un gruppo di raccolte include tutte le raccolte con lo stesso ID raccolta. Per eseguire una query sul gruppo di raccolte che restituisca risultati filtrati o ordinati da un gruppo di raccolte, devi creare un indice corrispondente con l'ambito del gruppo di raccolte.

Ordine predefinito e campo __name__

Oltre a ordinare i documenti in base alle modalità di indice specificate per ogni campo (crescente o decrescente) , gli indici applicano un ordinamento finale in base al campo __name__ di ogni documento. Il valore del campo __name__ è impostato sul percorso completo del documento. Ciò significa che i documenti nel set di risultati con gli stessi valori di campo vengono ordinati in base al percorso del documento.

Per impostazione predefinita, il campo __name__ viene ordinato nella stessa direzione dell'ultimo campo ordinato nella definizione dell'indice. Ad esempio:

Raccolta Campi indicizzati Ambito di query
cities Nome di , __name__ Raccolta
cities Stato , __name__ Raccolta
cities paese, popolazione, __name__ Raccolta

Per ordinare i risultati in base alla direzione non predefinita __name__, devi creare questo indice.

Indice perfetto

L'indice perfetto per una query, che ne consente un'esecuzione più efficiente, è definito in base alle seguenti proprietà, in ordine:

  1. Campi utilizzati nei filtri di uguaglianza
  2. Campi utilizzati negli ordinamenti
  3. Campi utilizzati nei filtri per intervallo e disuguaglianza (non già inclusi negli ordinamento)
  4. Campi utilizzati nelle aggregazioni (non già inclusi nei filtri di ordinamento e intervallo e disuguaglianza)

Firestore calcola i risultati per le query in questo modo:

  1. Identifica l'indice corrispondente alla raccolta, alle proprietà di filtro, agli operatori di filtro e all'ordinamento della query
  2. Identifica la posizione dell'indice da cui avviare la scansione utilizzando i filtri di uguaglianza della query e i filtri di intervallo e disuguaglianza nel primo ordine per campo
  3. Avvia la scansione dell'indice, restituendo ogni documento che soddisfa tutti i filtri finché:
    1. rileva un documento che non soddisfa le condizioni di filtro e conferma che eventuali documenti successivi non soddisferanno mai completamente le condizioni di filtro oppure
    2. raggiunge la fine dell'indice o
    3. ha raccolto il numero massimo di risultati richiesti dalla query

Esempio di indicizzazione

Creando automaticamente indici a campo singolo, Firestore consente all'applicazione di supportare rapidamente le query di database più basilari. Gli indici a campo singolo consentono di eseguire semplici query basate sui valori dei campi e sui comparatori <, <=, ==, >=, > e in. Per i campi di tipo array, consentono di eseguire query array-contains e array-contains-any.

Per spiegarci meglio, esamina gli esempi seguenti dal punto di vista della creazione dell'indice. Lo snippet seguente crea alcuni documenti city in una raccolta cities e imposta i campi name, state, country, capital, population e tags per ogni documento:

Web
var citiesRef = db.collection("cities");

citiesRef.doc("SF").set({
    name: "San Francisco", state: "CA", country: "USA",
    capital: false, population: 860000,
    regions: ["west_coast", "norcal"] });
citiesRef.doc("LA").set({
    name: "Los Angeles", state: "CA", country: "USA",
    capital: false, population: 3900000,
    regions: ["west_coast", "socal"] });
citiesRef.doc("DC").set({
    name: "Washington, D.C.", state: null, country: "USA",
    capital: true, population: 680000,
    regions: ["east_coast"] });
citiesRef.doc("TOK").set({
    name: "Tokyo", state: null, country: "Japan",
    capital: true, population: 9000000,
    regions: ["kanto", "honshu"] });
citiesRef.doc("BJ").set({
    name: "Beijing", state: null, country: "China",
    capital: true, population: 21500000,
    regions: ["jingjinji", "hebei"] });

Presupponendo le impostazioni predefinite di indicizzazione automatica, Firestore aggiorna un indice a campo singolo crescente per campo non array, un indice a campo singolo discendente per campo non array e un indice a campo singolo contenente un array per il campo array. Ogni riga nella tabella seguente rappresenta una voce in un indice a campo singolo:

Raccolta Campo indicizzato Ambito di query
cities Nome Raccolta
cities stato Raccolta
cities paese Raccolta
cities capitale Raccolta
cities popolazione Raccolta
cities Nome Raccolta
cities stato Raccolta
cities paese Raccolta
cities capitale Raccolta
cities popolazione Raccolta
cities array-contains regioni Raccolta

Query supportate da indici a campo singolo

Utilizzando questi indici a campo singolo creati automaticamente, puoi eseguire semplici query come le seguenti:

Web
const stateQuery = citiesRef.where("state", "==", "CA");
const populationQuery = citiesRef.where("population", "<", 100000);
const nameQuery = citiesRef.where("name", ">=", "San Francisco");

Puoi anche creare query in e di uguaglianza composta (==):

Web
citiesRef.where('country', 'in', ["USA", "Japan", "China"])

// Compound equality queries
citiesRef.where("state", "==", "CO").where("name", "==", "Denver")
citiesRef.where("country", "==", "USA")
         .where("capital", "==", false)
         .where("state", "==", "CA")
         .where("population", "==", 860000)

Se devi eseguire una query composta che utilizza un confronto di intervalli (<, <=, > o >=) o se devi ordinare in base a un campo diverso, devi creare un indice composto per la query.

L'indice array-contains ti consente di eseguire query sul campo dell'array regions:

Web
citiesRef.where("regions", "array-contains", "west_coast")
// array-contains-any and array-contains use the same indexes
citiesRef.where("regions", "array-contains-any", ["west_coast", "east_coast"])

Query supportate da indici composti

Firestore usa indici composti per supportare query composte non ancora supportate da indici a campo singolo. Ad esempio, avresti bisogno di un indice composto per le seguenti query:

Web
citiesRef.where("country", "==", "USA").orderBy("population", "asc")
citiesRef.where("country", "==", "USA").where("population", "<", 3800000)
citiesRef.where("country", "==", "USA").where("population", ">", 690000)
// in and == clauses use the same index
citiesRef.where("country", "in", ["USA", "Japan", "China"])
         .where("population", ">", 690000)

Queste query richiedono l'indice composto riportato di seguito. Poiché la query utilizza un'uguaglianza (== o in) per il campo country, puoi utilizzare una modalità di indice crescente o decrescente per questo campo. Per impostazione predefinita, le clausole di disuguaglianza applicano un ordinamento crescente in base al campo nella clausola di disuguaglianza.

Raccolta Campi indicizzati Ambito di query
cities (o ) paese, popolazione Raccolta

Per eseguire le stesse query ma con un ordinamento decrescente, è necessario un indice composto aggiuntivo in direzione decrescente per population:

Web
citiesRef.where("country", "==", "USA").orderBy("population", "desc")

citiesRef.where("country", "==", "USA")
         .where("population", "<", 3800000)
         .orderBy("population", "desc")

citiesRef.where("country", "==", "USA")
         .where("population", ">", 690000)
         .orderBy("population", "desc")

citiesRef.where("country", "in", ["USA", "Japan", "China"])
         .where("population", ">", 690000)
         .orderBy("population", "desc")
Raccolta Campi indicizzati Ambito di query
cities paese, popolazione Raccolta
città paese, popolazione Raccolta

Devi anche creare un indice composto per combinare una query array-contains o array-contains-any con clausole aggiuntive.

Web
citiesRef.where("regions", "array-contains", "east_coast")
         .where("capital", "==", true)

// array-contains-any and array-contains use the same index
citiesRef.where("regions", "array-contains-any", ["west_coast", "east_coast"])
         .where("capital", "==", true)
Raccolta Campi indicizzati Ambito di query
cities Tag array-contains, con (o ) di lettere maiuscole Raccolta

Query supportate dagli indici dei gruppo di raccolte

Per dimostrare un indice con l'ambito del gruppo di raccolte, immagina di aggiungere una raccolta secondaria landmarks ad alcuni dei documenti city:

Web
var citiesRef = db.collection("cities");

citiesRef.doc("SF").collection("landmarks").doc().set({
    name: "Golden Gate Bridge",
    category : "bridge" });
citiesRef.doc("SF").collection("landmarks").doc().set({
    name: "Golden Gate Park",
    category : "park" });

citiesRef.doc("DC").collection("landmarks").doc().set({
    name: "National Gallery of Art",
    category : "museum" });
citiesRef.doc("DC").collection("landmarks").doc().set({
    name: "National Mall",
    category : "park" });

Utilizzando il seguente indice a campo singolo con ambito della raccolta, puoi eseguire query sulla raccolta landmarks di una singola città in base al campo category:

Raccolta Campi indicizzati Ambito di query
punti di riferimento Categoria (o ) Raccolta
Web
citiesRef.doc("SF").collection("landmarks").where("category", "==", "park")
citiesRef.doc("SF").collection("landmarks").where("category", "in", ["park", "museum"])

Ora, immagina di voler cercare informazioni sui punti di riferimento di tutte le città. Per eseguire questa query sul gruppo di raccolte composto da tutte le raccolte landmarks, devi abilitare un indice a campo singolo landmarks con ambito del gruppo di raccolta:

Raccolta Campi indicizzati Ambito di query
punti di riferimento Categoria (o ) Gruppo di raccolte

Con questo indice attivato, puoi eseguire query sul gruppo di raccolte landmarks:

Web
var landmarksGroupRef = db.collectionGroup("landmarks");

landmarksGroupRef.where("category", "==", "park")
landmarksGroupRef.where("category", "in", ["park", "museum"])

Per eseguire una query sul gruppo di raccolte che restituisca risultati filtrati o ordinati, devi abilitare un indice singolo o composito corrispondente con ambito del gruppo di raccolte. Le query del gruppo di raccolte che non filtrano né ordinano i risultati, tuttavia, non richiedono definizioni di indice aggiuntive.

Ad esempio, puoi eseguire la seguente query sul gruppo di raccolte senza abilitare un indice aggiuntivo:

Web
db.collectionGroup("landmarks").get()

Voci indice

Gli indici configurati del progetto e la struttura di un documento determinano il numero di voci di indice per un documento. Le voci di indice vengono conteggiate ai fini del limite del numero di voci di indice.

L'esempio seguente mostra le voci di indice di un documento.

Documento

/cities/SF

city_name : "San Francisco"
temperatures : {summer: 67, winter: 55}
neighborhoods : ["Mission", "Downtown", "Marina"]

Indici a campo singolo

  • ASC City_name
  • città_name DESC
  • temperature.estate ASC
  • temperature.estate DESC
  • temperature.inverno ASC
  • temperature.winter DESC
  • quartieres Array Contains (ASC e DESC)

Indici composti

  • città_name ASC, quartieri ARRAY
  • città_name DESC, quartieri ARRAY

Voci indice

Questa configurazione di indicizzazione genera le seguenti 18 voci di indice per il documento:

Indice Dati indicizzati
Voci di indice a campo singolo
ASC City_name city_name: "Milano"
città_name DESC city_name: "Milano"
temperature.estate ASC temperature.estate: 67
temperature.estate DESC temperature.estate: 67
temperature.inverno ASC temperature.inverno: 55
temperature.winter DESC temperature.inverno: 55
L'array di quartieri Contiene ASC quartieri: "Missione"
Quartieri Array Contiene DESC quartieri: "Missione"
L'array di quartieri Contiene ASC quartieri: "Centro"
Quartieri Array Contiene DESC quartieri: "Centro"
L'array di quartieri Contiene ASC quartieri: "Marina"
Quartieri Array Contiene DESC quartieri: "Marina"
Voci di indice composto
città_name ASC, quartieri ARRAY city_name: "San Francisco", quartieri: "Missione"
città_name ASC, quartieri ARRAY city_name: "San Francisco", quartieri: "Centro"
città_name ASC, quartieri ARRAY city_name: "San Francisco", quartieri: "Marina"
città_name DESC, quartieri ARRAY city_name: "San Francisco", quartieri: "Missione"
città_name DESC, quartieri ARRAY city_name: "San Francisco", quartieri: "Centro"
città_name DESC, quartieri ARRAY city_name: "San Francisco", quartieri: "Marina"

Indici e prezzi

Gli indici contribuiscono ai costi di archiviazione della tua applicazione. Per saperne di più su come vengono calcolate le dimensioni dell'archiviazione per gli indici, consulta Dimensioni delle voci di indice.

Sfruttare l'unione degli indici

Sebbene Firestore utilizzi un indice per ogni query, non è necessariamente necessario un indice per query. Per le query con più clausole di uguaglianza (==) e, facoltativamente, una clausola orderBy, Firestore può riutilizzare gli indici esistenti. Firestore può unire gli indici per creare filtri di uguaglianza semplici per creare gli indici composti necessari per query di uguaglianza più ampie.

Puoi ridurre i costi di indicizzazione identificando le situazioni in cui puoi sfruttare l'unione degli indici. Ad esempio, immagina una raccolta restaurants per un'app di valutazione dei ristoranti:

  • Ristoranti

    • hamburgerthyme

      name : "Burger Thyme"
      category : "burgers"
      city : "San Francisco"
      editors_pick : true
      star_rating : 4

Ora, immagina che questa app utilizzi query come quelle che seguono. Tieni presente che l'app utilizza combinazioni di clausole di uguaglianza per category, city e editors_pick e ordina sempre in ordine crescente per star_rating:

Web
db.collection("restaurants").where("category", "==", "burgers")
                            .orderBy("star_rating")

db.collection("restaurants").where("city", "==", "San Francisco")
                            .orderBy("star_rating")

db.collection("restaurants").where("category", "==", "burgers")
                            .where("city", "==", "San Francisco")
                            .orderBy("star_rating")

db.collection("restaurants").where("category", "==", "burgers")
                            .where("city", "==" "San Francisco")
                            .where("editors_pick", "==", true )
                            .orderBy("star_rating")

Puoi creare un indice per ogni query:

Raccolta Campi indicizzati Ambito di query
ristoranti Categoria , stelle Raccolta
ristoranti città, stelle Raccolta
ristoranti Categoria , città, stelle Raccolta
ristoranti Categoria , città, scelta dagli editor, star_rating Raccolta

Come soluzione migliore, puoi ridurre il numero di indici sfruttando la capacità di Firestore di unire gli indici per le clausole di uguaglianza:

Raccolta Campi indicizzati Ambito di query
ristoranti Categoria , stelle Raccolta
ristoranti città, stelle Raccolta
ristoranti scelta dagli editor, valutazione_stella Raccolta

Questo insieme di indici non solo è più piccolo, ma supporta anche una query aggiuntiva:

Web
db.collection("restaurants").where("editors_pick", "==", true)
                            .orderBy("star_rating")

Limiti di indicizzazione

Agli indici si applicano i limiti seguenti. Per tutte le quote e i limiti, consulta Quote e limiti.

Questa pagina identifica le quote e i limiti delle richieste per Firestore.

Limite Dettagli
Numero massimo di indici composti per un database
Numero massimo di configurazioni a campo singolo per un database

Una configurazione a livello di campo può contenere più configurazioni per lo stesso campo. Ad esempio, un'esenzione per l'indicizzazione a campo singolo e un criterio TTL nello stesso campo vengono conteggiati come una configurazione di campo ai fini del limite.

Numero massimo di voci di indice per ogni documento

40.000

Il numero di voci di indice corrisponde alla somma di quanto segue per un documento:

  • Numero di voci degli indici a campo singolo
  • Numero di voci degli indici composti

Per scoprire in che modo Firestore trasforma un documento e una serie di indici in voci di indice, vedi questo esempio di conteggio di voci di indice.

Numero massimo di campi in un indice composto 100
Dimensione massima di una voce di indice

7,5 KiB

Per scoprire in che modo Firestore calcola la dimensione di una voce di indice, vai alla pagina Dimensioni delle voci di indice.

Somma massima delle dimensioni delle voci di indice di un documento

8 MiB

La dimensione totale corrisponde alla somma di quanto segue per un documento:

  • Somma delle dimensioni delle voci degli indici a campo singolo di un documento
  • Somma delle dimensioni delle voci degli indici composti di un documento
  • Dimensione massima di un valore di campo indicizzato

    1500 byte

    I valori di campo superiori a 1500 byte vengono troncati. Le query che includono valori di campo troncati possono restituire risultati incoerenti.

    Best practice per l'indicizzazione

    Per la maggior parte delle app, puoi fare affidamento sull'indicizzazione automatica e sui link dei messaggi di errore per gestire gli indici. Tuttavia, ti consigliamo di aggiungere esenzioni a campo singolo nei seguenti casi:

    Richiesta Descrizione
    Campi stringa grandi

    Se hai un campo stringa che spesso contiene lunghi valori stringa che non utilizzi per le query, puoi ridurre i costi di archiviazione escludendo il campo dall'indicizzazione.

    Elevate velocità di scrittura in una raccolta contenente documenti con valori sequenziali

    Se indicizza un campo che aumenta o diminuisce in sequenza tra i documenti di una raccolta, ad esempio un timestamp, la frequenza di scrittura massima nella raccolta è di 500 scritture al secondo. Se non esegui query basate sul campo con valori sequenziali, puoi escludere l'indicizzazione del campo per ignorare questo limite.

    In un caso d'uso IoT con un'elevata frequenza di scrittura, ad esempio, una raccolta contenente documenti con un campo timestamp potrebbe avvicinarsi al limite di 500 scritture al secondo.

    Campi TTL

    Se utilizzi i criteri di durata (TTL), tieni presente che il campo TTL deve essere un timestamp. L'indicizzazione sui campi TTL è abilitata per impostazione predefinita e può influire sulle prestazioni con frequenze di traffico più elevate. Come best practice, aggiungi esenzioni a campo singolo per i campi TTL.

    Array di grandi dimensioni o campi della mappa

    I campi array o di mappa di grandi dimensioni possono avvicinarsi al limite di 40.000 voci di indice per documento. Se non stai eseguendo query sulla base di un array o di un campo di mappa di grandi dimensioni, devi esentarlo dall'indicizzazione.

    Se utilizzi query con operatori di intervallo e disuguaglianza su più campi, consulta le considerazioni sull'indicizzazione che dovresti prendere in considerazione per ottimizzare le prestazioni e il costo delle query Firestore

    Per maggiori informazioni su come risolvere i problemi di indicizzazione (fanout dell'indice, errori INVALID_ARGUMENT), consulta la pagina di risoluzione dei problemi.