Czy jesteś pewien, że Twój indeks został utworzony? czy możesz podać wyjście getIndexes()
Twojej kolekcji
np:db.my_collection.getIndexes()
i wyjaśnienie zapytania
db.my_collection.find({created_at_year: 2014, created_at_month: 1, created_at_day: 28 }).explain()
PS:oczywiście muszę zgodzić się z @Aesthete, że przechowujesz znacznie więcej, niż potrzebujesz...
Aktualizacja z 29.01.2014
Idealny! Jak widzisz, masz cztery różne indeksy, kiedy możesz utworzyć JEDEN indeks złożony, który będzie zawierał je wszystkie.
definiowanie
db.my_collection.ensureIndex({created_at_year: 1, created_at_month: 1, created_at_day: 1, created_at_hour: 1 })
zapewni dokładniejszy indeks, który umożliwi zapytanie o:
year
year
imonth
year
imonth
iday
year
imonth
iday
ihour
Dzięki temu Twoje zapytania (z czterema kluczami) będą znacznie szybsze, ponieważ wszystkie Twoje kryteria zostaną spełnione w danych indeksu!
pamiętaj, że kolejność kluczy w ensureIndex()
jest kluczowe, że kolejność faktycznie definiuje wyżej wymienioną listę zapytań!
Pamiętaj też, że jeśli potrzebujesz tylko tych 4 pól, to jeśli określisz poprawną projekcję
np:db.my_collection.find({created_at_year: 2014, created_at_month: 1, created_at_day: 28}, { created_at_year: 1, created_at_month: 1, created_at_day: 1 })
wtedy zostanie użyty tylko indeks, czyli maksymalna wydajność!