Dalam hal ini, indeks tidak membantu karena set hasil pencocokan Anda terdiri dari hampir seluruh koleksi. Itu berarti harus memuat ke dalam RAM dan melintasi sebagian besar indeks, serta memuat ke dalam RAM dan melintasi dokumen itu sendiri.
Tanpa indeks, itu hanya akan melakukan pemindaian tabel, memeriksa setiap dokumen dan mengembalikan jika cocok.
Dalam kasus seperti ini di mana kueri akan mengembalikan hampir seluruh koleksi, indeks mungkin tidak membantu.
Menambahkan .limit() akan mempercepat kueri. Anda juga dapat memaksa pengoptimal kueri untuk tidak menggunakan indeks dengan .hint():
db.collection.find().hint({$natural:1})
Anda juga bisa memaksa kueri untuk memberikan nilai hasil langsung dari indeks itu sendiri dengan membatasi bidang yang dipilih hanya yang telah Anda indeks. Ini memungkinkannya untuk menghindari keharusan memuat dokumen apa pun setelah melakukan pemindaian indeks.
Coba ini dan lihat apakah output penjelasan menunjukkan "indexOnly":true
db.numbers.find({number: {$gt: 10000}}, {number:1}).explain()
Detailnya di sini: