sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB + Python - mycket långsam enkel fråga

Är du säker på att ditt index är skapat? kan du ge utdata från getIndexes() av din samling

t.ex.:db.my_collection.getIndexes()

och förklaringen av din fråga

db.my_collection.find({created_at_year: 2014, created_at_month: 1, created_at_day: 28 }).explain()

PS:Självklart måste jag hålla med @Aesthete om att du lagrar mycket mer än du behöver...

29/1/2014 uppdatering

Perfekt! Som du ser har du fyra olika index när du kan skapa ETT sammansatt index som kommer att inkludera dem alla.

definiera

db.my_collection.ensureIndex({created_at_year: 1, created_at_month: 1, created_at_day: 1, created_at_hour: 1 })

ger dig ett mer exakt index som gör att du kan fråga efter:

  • year
  • year och month
  • year och month och day
  • year och month och day och hour

Detta kommer att göra dina frågor (med de fyra nycklarna) mycket snabbare, eftersom alla dina kriterier kommer att uppfyllas i indexdata!

Observera att ordningen på nycklar i ensureIndex() är avgörande, den ordningen definierar faktiskt ovan nämnda lista med frågor!

Observera också att om allt du behöver är dessa 4 fält, än om du anger en korrekt projektion
t.ex.:
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 })

då kommer bara indexet att användas, vilket är maximal prestanda!



  1. Något sätt att spara datumtyp som lokal tid i MongoDB?

  2. Infoga i mycket kapslade dokument MongoDB

  3. Hur man tillämpar BsonRepresentation-attribut enligt konvention när man använder MongoDB

  4. mongodb datakatalogbehörigheter