MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come MongoDB sceglie i piani per i candidati

Se una query può essere soddisfatta da più indici definiti nella raccolta, MongoDB verificherà tutti gli indici applicabili in parallelo. Il primo indice che può restituire 101 risultati sarà selezionato dal pianificatore di query. Ci sono altri aspetti della selezione dell'indice, ma in generale questo è vero secondo il Ottimizzazione delle query documentazione.

Questo metodo di selezione dell'indice può selezionare un indice non ottimale. Questo perché dal punto di vista di MongoDB, hai più indici che descrivono la stessa cosa. Per mitigare la selezione dell'indice non ottimale che hai osservato, puoi fare:

  1. Rimuovi tutti gli altri indici che ritieni non ottimali.

    Questo per garantire che il pianificatore di query non abbia altra scelta se non quella di scegliere indici personalizzati per la tua query.

  2. Usa il hint() metodo

    hint() ti consente di dire esplicitamente a MongoDB di utilizzare l'indice prescritto per la query. Ad esempio:

    db.tasks.find(...).hint({project: 1, created_by: 1})
    

    Consulta https://docs.mongodb.com/v2. 6/riferimento/operatore/meta/suggerimento/ per ulteriori informazioni su hint() .

Un'altra sfumatura nella tua query è che include un $or operatore. In questo caso, ogni termine nel $or l'espressione deve avere un indice associato , altrimenti MongoDB eseguirà una scansione della raccolta (BasicCursor nei termini di MongoDB 2.6). Questo è spiegato in maggiori dettagli su https://docs .mongodb.com/v2.6/reference/operator/query/or/#behaviors