Pertinente solo per la versione Enterprise di Cloud Firestore. |
Per risolvere i problemi relativi alle query lente, utilizza Query Explain per ottenere il piano di esecuzione della query e il profilo di esecuzione runtime. La seguente sezione descrive i passaggi che puoi intraprendere per ottimizzare le prestazioni delle query a seconda del profilo di esecuzione:
Limitare il numero di risultati
Utilizza il campo Record restituiti nell'albero di esecuzione per
identificare se la query restituisce molti documenti. Valuta la possibilità di limitare il numero
di documenti restituiti utilizzando la
clausola $limit
. In questo modo si riducono le dimensioni in byte serializzati dei risultati quando vengono restituiti ai client sulla rete. Nei casi
in cui il nodo Limit
è preceduto da un nodo MajorSort
, il motore di query può
unire i nodi Limit
e MajorSort
e sostituire una materializzazione e un ordinamento in memoria
completi con un ordinamento TopN, riducendo il requisito di memoria per
la query.
Limitare le dimensioni del documento dei risultati
Valuta la possibilità di limitare le dimensioni del documento restituito utilizzando la clausola $project
per evitare di recuperare campi non necessari. Ciò contribuisce a ridurre il costo di calcolo e memoria dell'elaborazione
dei risultati intermedi e le dimensioni in byte serializzati dei risultati quando vengono restituiti
ai client sulla rete. Nei casi in cui tutti i campi a cui viene fatto riferimento nella query sono coperti da un indice normale (non multikey), ciò consente anche di coprire completamente la query con la scansione dell'indice, evitando la necessità di recuperare i documenti dallo spazio di archiviazione principale.
Utilizzare gli indici
Segui queste istruzioni per configurare e ottimizzare gli indici.
Identificare se la query utilizza un indice
Puoi identificare se la query utilizza un indice controllando i nodi foglia nell'albero di esecuzione. Se il nodo foglia dell'albero di esecuzione è un nodo TableScan, significa che la query non utilizza un indice e sta eseguendo la scansione dei documenti dallo spazio di archiviazione primario. Se viene utilizzato un indice, il nodo foglia dell'albero di esecuzione mostrerà l'ID indice e i campi indice dell'indice.
Identificare se l'indice utilizzato può essere ottimizzato
Un indice è utile per una query se può ridurre il numero di documenti che il motore di query deve recuperare dallo spazio di archiviazione principale o se l'ordinamento dei campi può soddisfare il requisito di ordinamento della query.
Se viene utilizzato un indice per una query, ma il motore di query recupera e scarta ancora molti documenti, come identificato da un nodo di scansione che restituisce molti record seguito da un nodo di filtro che restituisce pochi record, questo è un segnale che il predicato della query soddisfatto utilizzando l'indice non è selettivo. Per creare un indice più adatto, consulta Crea indici.
Se per una query viene utilizzato un indice non multikey, ma il motore di query esegue comunque un riordino in memoria del set di risultati, come identificato da un nodo MajorSort nell'albero di esecuzione della query, questo è un segnale che l'indice utilizzato non può essere utilizzato per soddisfare il requisito di ordinamento della query. Per creare un indice più adatto, consulta la sezione successiva.
Crea indici
Segui la documentazione sulla gestione degli indici per creare indici. Per assicurarti che la query possa utilizzare gli indici, crea indici regolari (non Multikey) con i campi nel seguente ordine:
- Tutti i campi che verranno utilizzati negli operatori di uguaglianza. Per massimizzare la possibilità di riutilizzo tra le query, ordina i campi in ordine decrescente di occorrenza degli operatori di uguaglianza tra le query.
- Tutti i campi in base ai quali verrà eseguito l'ordinamento (nello stesso ordine).
- Campi che verranno utilizzati negli operatori di intervallo o di disuguaglianza in ordine decrescente di selettività del vincolo di query.
- Campi che verranno restituiti nell'ambito di una query nell'indice: l'inclusione di questi campi nell'indice consente all'indice di coprire la query ed evitare di dover recuperare il documento dallo spazio di archiviazione principale.
Per le query che prevedono il filtraggio e l'ordinamento dei campi array, valuta la possibilità di creare indici multichiave.
Utilizzare il suggerimento per la query
Se hai creato un indice più adatto per la query, ma il motore di query non lo utilizza, puoi ignorare la preferenza dell'indice del motore di query utilizzando un suggerimento per la query.
Per maggiori informazioni sull'output di una query eseguita con Query Explain, consulta Riferimento all'esecuzione di query.