Êtes-vous sûr que votre index est créé ? pourriez-vous fournir la sortie de getIndexes() de votre collection
par exemple :db.my_collection.getIndexes()
et l'explication de votre requête
db.my_collection.find({created_at_year: 2014, created_at_month: 1, created_at_day: 28 }).explain()
PS :bien sûr, je dois être d'accord avec @Aesthete sur le fait que vous stockez beaucoup plus que nécessaire...
Mise à jour du 29/01/2014
Parfait! Comme vous le voyez, vous avez quatre index différents alors que vous pouvez créer UN index composé qui les inclura tous.
définir
db.my_collection.ensureIndex({created_at_year: 1, created_at_month: 1, created_at_day: 1, created_at_hour: 1 })
vous fournira un index plus précis qui vous permettra de rechercher :
yearyearetmonthyearetmonthetdayyearetmonthetdayethour
Cela rendra vos requêtes (avec les quatre clés) beaucoup plus rapides, car tous vos critères seront remplis dans les données d'index !
veuillez noter que l'ordre des clés dans ensureIndex() est crucial, cet ordre définit en fait la liste de requêtes mentionnée ci-dessus !
Notez également que si vous n'avez besoin que de ces 4 champs, alors si vous spécifiez une projection correcte
par exemple :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 })
alors seul l'index sera utilisé, ce qui est la performance maximale !