2013-04-23 10 views
5

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.)

+0

Cosa succede se hai creato l'indice: "owner_1_date_-1_from_backup_1'? – Sammaye

+0

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

+2

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

risposta

3

Questo sembra essere quello di una regressione in 2.4 che colpisce fix SERVER-5063, quando uno dei valori in {$ in: []} clausola è "nullo". L'ho presentato come nuovo biglietto https://jira.mongodb.org/browse/SERVER-9495 che spero verrà risolto e risolto presto.

Nel frattempo, a seconda del motivo per cui esistono valori nulli (o assenza di campo?) Insieme a vero/falso si hanno diverse opzioni, alcune che comportano la modifica della query alcune modifiche ai dati. Non consiglierei di effettuare il downgrade a 2.2 solo per quello, ma è anche una possibilità.

Problemi correlati