В този случай индексът не помага, тъй като вашият съвпадащ набор от резултати се състои от почти цялата колекция. Това означава, че трябва да се зарежда в RAM и да обхожда по-голямата част от индекса, както и да се зарежда в RAM и да обхожда самите документи.
Без индекса той просто ще направи сканиране на таблица, като инспектира всеки документ и ще се върне, ако съвпадне.
В случаи като този, когато една заявка ще върне почти цяла колекция, индексът може да не е от полза.
Добавянето на .limit() ще ускори заявката. Можете също да принудите оптимизатора на заявките да не използва индекса с .hint():
db.collection.find().hint({$natural:1})
Можете също така да принудите заявката да предостави стойностите на резултатите директно от самия индекс, като ограничите избраните полета само до тези, които сте индексирали. Това му позволява да избегне необходимостта от зареждане на каквито и да било документи след извършване на сканирането на индекса.
Опитайте това и вижте дали изходът за обяснение показва "indexOnly":true
db.numbers.find({number: {$gt: 10000}}, {number:1}).explain()
Подробности тук: