MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

време за търсене с индекс> без индекс

В този случай индексът не помага, тъй като вашият съвпадащ набор от резултати се състои от почти цялата колекция. Това означава, че трябва да се зарежда в RAM и да обхожда по-голямата част от индекса, както и да се зарежда в RAM и да обхожда самите документи.

Без индекса той просто ще направи сканиране на таблица, като инспектира всеки документ и ще се върне, ако съвпадне.

В случаи като този, когато една заявка ще върне почти цяла колекция, индексът може да не е от полза.

Добавянето на .limit() ще ускори заявката. Можете също да принудите оптимизатора на заявките да не използва индекса с .hint():

db.collection.find().hint({$natural:1})

Можете също така да принудите заявката да предостави стойностите на резултатите директно от самия индекс, като ограничите избраните полета само до тези, които сте индексирали. Това му позволява да избегне необходимостта от зареждане на каквито и да било документи след извършване на сканирането на индекса.

Опитайте това и вижте дали изходът за обяснение показва "indexOnly":true

db.numbers.find({number: {$gt: 10000}}, {number:1}).explain()

Подробности тук:

http://www.mongodb.org /display/DOCS/Retrieving+a+Subset+of+Fields#RetrievingaSubsetofFields-CoveredIndexes




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как работи сортирането с `$or` и `$in` заявки в MongoDB?

  2. Извлечете две стойности на подмасив в mongodb чрез $elemMatch

  3. Какъв е правилният начин за работа с ISODate в Mongoose

  4. Методът MongoDB LinQ Select наистина ще извлече само подмножество от полета?

  5. MongoDB - Как да изберете само числови низове / Проверете дали низът е числов в mongo-shell