Apakah Anda yakin bahwa indeks Anda telah dibuat? bisakah Anda memberikan output dari getIndexes()
koleksi Anda
misalnya:db.my_collection.getIndexes()
dan penjelasan dari pertanyaan Anda
db.my_collection.find({created_at_year: 2014, created_at_month: 1, created_at_day: 28 }).explain()
PS:tentu saja saya harus setuju dengan @Aesthete tentang fakta bahwa Anda menyimpan lebih dari yang Anda butuhkan...
Pembaruan 29/1/2014
Sempurna! Seperti yang Anda lihat, Anda memiliki empat indeks berbeda ketika Anda dapat membuat SATU indeks gabungan yang akan mencakup semuanya.
mendefinisikan
db.my_collection.ensureIndex({created_at_year: 1, created_at_month: 1, created_at_day: 1, created_at_hour: 1 })
akan memberi Anda indeks yang lebih tepat yang memungkinkan Anda untuk menanyakan:
year
year
danmonth
year
danmonth
danday
year
danmonth
danday
danhour
Ini akan membuat kueri Anda (dengan empat kunci) jauh lebih cepat, karena semua kriteria Anda akan terpenuhi dalam data indeks!
harap dicatat bahwa urutan kunci di ensureIndex()
sangat penting, urutan itu sebenarnya mendefinisikan daftar kueri yang disebutkan di atas!
Perhatikan juga bahwa jika yang Anda butuhkan hanyalah 4 bidang ini, daripada jika Anda menentukan proyeksi yang benar
misalnya: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 })
maka hanya indeks yang akan digunakan, yang merupakan kinerja maksimal!