Er du sikker på, at dit indeks er oprettet? kan du give outputtet af getIndexes()
af din samling
f.eks.:db.my_collection.getIndexes()
og forklaringen på din forespørgsel
db.my_collection.find({created_at_year: 2014, created_at_month: 1, created_at_day: 28 }).explain()
PS:Jeg må selvfølgelig være enig med @Aesthete i, at du gemmer meget mere, end du behøver...
29/1/2014-opdatering
Perfekt! Som du kan se, har du fire forskellige indekser, når du kan oprette ET sammensat indeks, som vil inkludere dem alle.
definerer
db.my_collection.ensureIndex({created_at_year: 1, created_at_month: 1, created_at_day: 1, created_at_hour: 1 })
vil give dig et mere præcist indeks, der gør det muligt for dig at forespørge efter:
year
year
ogmonth
year
ogmonth
ogday
year
ogmonth
ogday
oghour
Dette vil gøre dine forespørgsler (med de fire nøgler) meget hurtigere, fordi alle dine kriterier vil blive opfyldt i indeksdataene!
Bemærk venligst, at rækkefølgen af nøgler i ensureIndex()
er afgørende, at den rækkefølge faktisk definerer ovennævnte liste over forespørgsler!
Bemærk også, at hvis alt du behøver er disse 4 felter, end hvis du angiver en korrekt projektion
f.eks.: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 })
så vil kun indekset blive brugt, hvilket er den maksimale ydeevne!