L'ordine dei campi nell'indice è importante; il miglior indice composto per il tuo esempio di ricerca e ordinamento sarebbe in realtà:
db.test.ensure_index([("xxx",1),("_id",-1)])
Poiché i tuoi criteri di ricerca sono nel campo 'xxx', inserendo questo campo per primo nell'indice troverai più risultati rispetto alla ricerca per _id
e quindi filtrando i documenti corrispondenti al tuo xxx
criteri.
Se guardi il n
numero per ogni piano considerato da Query Optimizer in allPlans
, il BtreeCursor xxx_1
index restituisce effettivamente la maggior parte dei risultati (34). Gli altri indici restituiscono 9, 10 e 16 risultati... quindi sarebbe meno efficiente per i criteri di ricerca indicati.
Per ulteriori informazioni sull'ottimizzazione degli indici, questo articolo è molto utile:Ottimizzazione degli indici composti MongoDB .