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

Как да ускорите mongo заявката

Няколко неща, които можете да направите тук:

Преди всичко използвайте $in вместо $or.

Второ, MongoDB може само използвайте индекс за първото си съвпадение, така че ще трябва да решите (като го изпробвате) кое от двете съвпадения е по-добро. Целта е да имате възможно най-бързо запитване и възможно най-малко документи, преминаващи през вашия конвейер. За целта правите следните неща:

Първо създайте трите индекса:

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

След това изпълнете следните три заявки и забележете полетата „cursor“, „n“, „nScanned“ и „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();

За последната заявка ще забележите, че "cursor" е "BasicCursor", тъй като $ne заявка не може да използва индекса.

Другите две ще ви покажат различни стойности за "ms", "n" и "nScanned". "ms" е времето, необходимо за изпълнение на заявката. Ако това е приблизително същото, тогава вижте разликата между стойностите "n" и "nScanned". Ще очаквам и предполагам, че разликата за заявката "versions.branch" е 0. За заявката "doctype" може да е различно. Ако "ms" не е приблизително същото, поставете $match, което е било най-бързо първо като клауза $match във вашия канал за агрегиране.

Ако и двете скорости ("ms") са еднакви, проверете стойностите "n". Ако "n" за заявката "prefix" е "5", а "n" за заявката "versions.branch" е "500", тогава това означава, че резултатът от заявката "prefix" е по-добър, тъй като по-малко документи се връщат. В такъв случай поставете това като първата си обобщена клауза за съвпадение. Ако "versions.branch" е много по-малко, използвайте това като първа клауза за $match.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $concatArrays

  2. IdMemberMap е null, използвайки опции за сериализиране на представянето

  3. MongoDB:заявки за документи с две равни полета, $match и $eq

  4. Уникален индекс на Mongoose на поддокумента

  5. премахване на обект от вложен масив от обекти mongodb