MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

czas wyszukiwania z indeksem> bez indeksu

W takim przypadku indeks nie pomaga, ponieważ pasujący zestaw wyników składa się z prawie całej kolekcji. Oznacza to, że musi ładować się do pamięci RAM i przemierzać większość indeksu, a także ładować do pamięci RAM i przeszukiwać same dokumenty.

Bez indeksu wykonałby po prostu skanowanie tabeli, sprawdzając każdy dokument i zwracając, jeśli zostanie dopasowany.

W takich przypadkach, gdy zapytanie zwróci prawie całą kolekcję, indeks może nie być pomocny.

Dodanie .limit() przyspieszy zapytanie. Możesz także zmusić optymalizator zapytań, aby nie używał indeksu za pomocą .hint():

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

Możesz również wymusić, aby zapytanie dostarczało wartości wyników bezpośrednio z samego indeksu, ograniczając wybrane pola tylko do tych, które zostały zindeksowane. Pozwala to uniknąć konieczności ładowania jakichkolwiek dokumentów po wykonaniu skanowania indeksu.

Spróbuj tego i sprawdź, czy dane wyjściowe wyjaśniania wskazują "indexOnly":true

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

Szczegóły tutaj:

http://www.mongodb.org /display/DOCS/Pobieranie+a+podzbioru+pól#Pobieraniepodzbioruindeksów objętych polami




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Co się dzieje, gdy mongodb zabraknie pamięci?

  2. Sharding z wiosennym mongo

  3. Jak usunąć wiele dokumentów w kolekcji podzielonej na partycje w Azure CosmosDB przy użyciu interfejsu API MongoDB?

  4. Dodaj pole do istniejącego dokumentu MongoDB (z Mongoose w Node.js)

  5. Grupuj dokumenty Mongo według identyfikatora i uzyskaj najnowszy dokument według sygnatury czasowej