Сигурни ли сте, че вашият индекс е създаден? бихте ли предоставили резултата от getIndexes()
от вашата колекция
напр.:db.my_collection.getIndexes()
и обяснението на вашето запитване
db.my_collection.find({created_at_year: 2014, created_at_month: 1, created_at_day: 28 }).explain()
PS:разбира се, трябва да се съглася с @Aesthete относно факта, че съхранявате много повече от необходимото...
Актуализация на 29/1/2014
перфектно! Както виждате, имате четири различни индекса, когато можете да създадете ЕДИН съставен индекс, който ще включва всички тях.
дефиниране
db.my_collection.ensureIndex({created_at_year: 1, created_at_month: 1, created_at_day: 1, created_at_hour: 1 })
ще ви предостави по-точен индекс, който ще ви позволи да правите заявки за:
year
year
иmonth
year
иmonth
иday
year
иmonth
иday
иhour
Това ще направи вашите заявки (с четирите клавиша) много по-бързи, тъй като всичките ви критерии ще бъдат изпълнени в индексните данни!
моля, имайте предвид, че редът на ключовете в ensureIndex()
е от решаващо значение, този ред всъщност дефинира горепосочения списък от заявки!
Също така имайте предвид, че ако всичко, от което се нуждаете, са тези 4 полета, отколкото ако посочите правилна проекция
напр.: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 })
тогава ще се използва само индексът, което е максималната производителност!