Ottimizza le prestazioni delle query

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 sezione seguente descrive i passaggi che puoi eseguire 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 fase 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 select(...) per restituire solo i campi richiesti o remove_fields(...) per eliminare i campi troppo grandi. 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, ciò consente anche alla query di essere completamente coperta dalla 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 principale. Se viene utilizzato un indice, il nodo foglia dell'albero di esecuzione mostrerà l'ID indice e i campi indice dell'indice.

Identificare un indice migliore

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 segno che il predicato della query soddisfatto utilizzando l'indice non è selettivo. Per creare un indice più adatto, consulta Crea indici.

Se un indice viene utilizzato per una query, 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 segno 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:

  1. 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.
  2. Tutti i campi in base ai quali verrà eseguito l'ordinamento (nello stesso ordine).
  3. Campi che verranno utilizzati negli operatori di intervallo o di disuguaglianza in ordine decrescente di selettività del vincolo di query.
  4. 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.

Utilizzare i suggerimenti per le 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.