Ê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 :
year
year
etmonth
year
etmonth
etday
year
etmonth
etday
ethour
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 !