2013-04-23 17 views
5

Mam kwerendę MongoDB, którą próbuję zoptymalizować. Stworzyłem indeks, który pasuje do pól w zapytaniu, ale wydaje mi się, że MongoDB nie ma możliwości skorzystania z indeksu bez wyraźnej nazwy hint(), mimo że wersje nscanned i milli s są lepsze w przypadku wersji z podpowiedziami.Dlaczego program MongoDB nie używa właściwego indeksu?

Oto indeksy, zapytanie (z lub bez podpowiedzi) i gadatliwy wyjaśnić:

http://paste.roguecoders.com/p/4face5649612e840da04c5fea0491c9b.txt

Jeden dodatkowy bit informacji: wskaźnik ten jest w dużej ish kolekcji, w zestaw replik, więc zbudowałem indeks przy użyciu offline method. Jest teraz obecny we wszystkich węzłach.

(Cytowany na MongoDB-User).

+0

Co zrobić, jeśli utworzono indeks: 'owner_1_date_-1_from_backup_1'? – Sammaye

+0

Mój indeks ma rację. Sortuję na 'date'. (A "podpowiedź()" potwierdza, że ​​jest lepiej.) Indeksowanie tej kolekcji w naszym zestawie danych produkcyjnych zajmuje ponad godzinę, więc nie chcę po prostu wypróbowywać rzeczy bez ważnego powodu. (-: – scoates

+2

Ten link może wyjaśniać, dlaczego otrzymujesz 'scanAndOrder' http://blog.mongolab.com/2012/06/cardinal-ins/ może to również wyjaśnić, dlaczego MongoDb nie widzi utworzonego indeksu jako optymalnego – Sammaye

Odpowiedz

3

Wydaje się, że do regresji w 2.4, która wpływa Server-5063 dylemat, gdy jedna z wartości na {$ w []} klauzuli jest „pusta”. Złożyłem to jako nowy bilet https://jira.mongodb.org/browse/SERVER-9495, który, mam nadzieję, zostanie wkrótce przetestowany i naprawiony.

W międzyczasie, w zależności od tego, dlaczego istnieją wartości null (lub nieobecność pola?) Wraz z wartością true/false, masz kilka opcji, niektóre z nich zmieniają zapytanie, zmieniając dane. Nie zalecałbym obniżania wartości do 2.2, ale jest to również możliwe.

Powiązane problemy