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
enmonth
year
enmonth
enday
year
enmonth
enday
enhour
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!