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

Jak przyspieszyć zapytanie mongo

Kilka rzeczy, które możesz tutaj zrobić:

Przede wszystkim użyj $in zamiast $lub.

Po drugie, MongoDB może tylko użyj indeksu dla pierwszego dopasowania, więc będziesz musiał zdecydować (poprzez wypróbowanie), które z dwóch dopasowań jest lepsze. Celem jest uzyskanie jak najszybszego zapytania i jak najmniejszej liczby dokumentów przechodzących przez potok. W tym celu wykonaj następujące czynności:

Najpierw utwórz trzy indeksy:

db.element.ensureIndex( { 'versions.branch' : 1 } );
db.element.ensureIndex( { 'doctype' : 1 } );
db.element.ensureIndex( { 'prefix' : 1 } );

Następnie uruchom następujące trzy zapytania i zwróć uwagę na pola „kursor”, „n”, „nScanned” i „ms”:

branch = "nameofbranch"; // guessing here
db.element.find( "versions.branch": branch ).explain();
db.element.find( "doctype" { $in: [ "15281", "15282" .... ] } ).explain();
db.element.find( "prefix": { $ne: "500" } ).explain();

W przypadku ostatniego zapytania zauważysz, że „kursor” to „BasicCursor”, ponieważ zapytanie $ne nie może korzystać z indeksu.

Pozostałe dwa pokażą różne wartości dla „ms”, „n” i „nScanned”. „ms” to czas potrzebny na uruchomienie zapytania. Jeśli jest w przybliżeniu taki sam, spójrz na różnicę między wartościami „n” i „nScanned”. Mam zamiar oczekiwać i zgadywać, że różnica dla zapytania „versions.branch” wynosi 0. Dla zapytania „doctype” może być inaczej. Jeśli „ms” nie jest w przybliżeniu taki sam, wpisz $match, który był najszybszy najpierw jako klauzula $match w potoku agregacji.

Jeśli prędkość ("ms") jest taka sama, sprawdź wartości "n". Jeśli „n” dla zapytania „prefix” to „5”, a „n” dla zapytania „versions.branch” to „500”, oznacza to, że wynik zapytania „prefix” jest lepszy, ponieważ mniej dokumenty są zwracane. W takim przypadku umieść to jako pierwszą klauzulę $match łącznie. Jeśli "versions.branch" jest dużo mniej, użyj go jako pierwszej klauzuli $match.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:czy możliwe jest przechwytywanie zdarzeń TTL za pomocą Change Stream w celu emulowania harmonogramu (cronjob)?

  2. dodaj użytkownika do mongodb przez python

  3. Jak używać django razem z mongoengine?

  4. MongoDB, Java, sortuj według pierwszego wpisu w tablicy

  5. MongoDB - błąd instalacji - kreator instalacji mongodb zakończył się przedwcześnie