MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB + Python - requête simple très lente

Ê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 et month
  • year et month et day
  • year et month et day et hour

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 !