Ho una query MongoDB che sto cercando di ottimizzare. Ho creato un indice che corrisponde ai campi nella query, ma non riesco a ottenere il pianificatore di query di MongoDB per utilizzare l'indice senza un esplicito hint()
, anche se lo nscanned
e lo milli
s sono migliori per la versione suggerita.Perché MongoDB non sta usando l'indice giusto?
Qui ci sono gli indici, la query (con e senza il suggerimento), e un verbose spiega:
http://paste.roguecoders.com/p/4face5649612e840da04c5fea0491c9b.txt
Un ulteriore bit di informazioni: questo indice è in una collezione grande-ish, in un set di repliche, quindi ho creato l'indice utilizzando offline method. Ora è presente in tutti i nodi.
(Originariamente pubblicato su MongoDB-User.)
Cosa succede se hai creato l'indice: "owner_1_date_-1_from_backup_1'? – Sammaye
Il mio indice è giusto. Sto selezionando 'date'. (E 'hint()' conferma che è meglio.) Ci vuole anche più di un'ora per indicizzare questa raccolta sul nostro set di dati di produzione, quindi non sono disposto a provare le cose senza una buona ragione. (-: – scoates
Questo link potrebbe spiegare perché stai ricevendo 'scanAndOrder' http://blog.mongolab.com/2012/06/cardinal-ins/ potrebbe anche spiegare perché MongoDb non vede l'indice creato come ottimale – Sammaye