Kolejność pól w indeksie ma znaczenie; najlepszym indeksem złożonym dla przykładu wyszukiwania i sortowania będzie w rzeczywistości:
db.test.ensure_index([("xxx",1),("_id",-1)])
Ponieważ Twoje kryteria wyszukiwania znajdują się w polu „xxx”, umieszczenie tego pola na pierwszym miejscu w indeksie zapewni więcej wyników niż wyszukiwanie według _id
a następnie filtrowanie do dokumentów pasujących do Twojego xxx
kryteria.
Jeśli spojrzysz na n
liczba dla każdego planu rozpatrywanego przez optymalizator zapytań w allPlans
, BtreeCursor xxx_1
indeks faktycznie zwraca najwięcej wyników (34). Inne indeksy zwracają wyniki 9, 10 i 16, więc byłoby mniej wydajne dla podanych kryteriów wyszukiwania.
Aby uzyskać więcej informacji na temat optymalizacji indeksów, bardzo pomocny jest ten artykuł:Optymalizacja indeksów złożonych MongoDB .