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

strategia indeksowania mongodb dla zapytań o zakres z różnymi polami

Zbyt dodaj trochę więcej do baloo odpowiedź.

Na sygnaturze czasowej vs. długi numer. Generalnie serwer MongoDB nie zauważy różnicy. Długość kodowania BSON jest taka sama (64 bity). Wydajność po stronie klienta może być różna w zależności od kodowania sterownika. Na przykład po stronie Javy przy użyciu sterownika 10gen znacznik czasu jest renderowany jako Date to jest dużo cięższe niż Long . Istnieją sterowniki które starają się uniknąć tego obciążenia.

Innym problemem jest to, że zobaczysz poprawę wydajności, jeśli zamkniesz zakres dla pierwszego pola indeksu. Więc jeśli użyjesz indeksu sugerowanego przez baloo :

db.collection.ensureIndex({start: 1, final: 1})

Twoje zapytanie będzie działać (potencjalnie znacznie) lepiej, jeśli zapytanie jest:

db.collection.find({start:{$gt:DateTime(...),$lt:DateTime(...)}, 
                    final:{$lt:DateTime(...)}})

Koncepcyjnie, jeśli myślisz o indeksach jak o drzewie, zakres zamknięty ogranicza obie strony drzewa, a nie tylko jedną stronę. Bez zamkniętego zakresu serwer musi "sprawdzić" wszystkie wpisy za pomocą start większa niż podana sygnatura czasowa, ponieważ nie zna relacji między start i final .

Może się nawet okazać, że wydajność zapytania nie jest lepsza przy użyciu indeksu pojedynczego pola, takiego jak:

db.collection.ensureIndex({start: 1})

Większość oszczędności pochodzi z przycinania pierwszego pola. Sytuacja, w której tak się nie stanie, to sytuacja, w której zapytanie jest objęte indeksem lub kolejność/sortowanie wyników można wyprowadzić z indeksu.

HTH - Rob.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Zapobiegaj podwójnemu logowaniu za pomocą FOSUserBundle

  2. MongoDB $pop

  3. Zapisywanie w Javie springdata dokumentu mongoDB z ograniczoną liczbą tablic ($slice i $sort)

  4. Usuwanie elementu z tablicy w mongodb

  5. Kroki instalacji MongoDB na Amazon Linux