sql >> Database >  >> NoSQL >> MongoDB

MongoDB + Python - zeer trage eenvoudige query

Weet u zeker dat uw index is gemaakt? zou je de uitvoer van getIndexes() . kunnen geven van je verzameling

bv:db.my_collection.getIndexes()

en de uitleg van uw vraag

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

PS:natuurlijk moet ik het met @Aesthete eens zijn dat je veel meer opslaat dan nodig is...

29/1/2014-update

Perfect! Zoals je ziet, heb je vier verschillende indexen als je EEN samengestelde index kunt maken die ze allemaal zal bevatten.

definiëren

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

zal u een nauwkeurigere index geven waarmee u kunt zoeken naar:

  • year
  • year en month
  • year en month en day
  • year en month en day en hour

Dit maakt uw zoekopdrachten (met de vier toetsen) veel sneller, omdat aan al uw criteria wordt voldaan in de indexgegevens!

houd er rekening mee dat de volgorde van de sleutels in ensureIndex() is cruciaal, die volgorde definieert eigenlijk de bovengenoemde lijst met vragen!

Merk ook op dat als alles wat je nodig hebt deze 4 velden zijn, dan als je een correcte projectie specificeert
eg:
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 })

dan wordt alleen de index gebruikt, wat de maximale prestatie is!



  1. Hoe kunnen we een vraag stellen voor ingesloten documenten via Java-stuurprogramma?

  2. MongoDB BSON-codec wordt niet gebruikt tijdens het coderen van het object

  3. groepeer MongoDB-verzameling per maand en totale inkomsten voor churn / inkomstengrafiek

  4. Mongoose-prototype:hoe een url dynamisch invoegen?