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

Простата MongoDB заявка е много бавна, въпреки че индексът е зададен

Нямате индекс, който mongo автоматично да използва за това, така че извършва пълно сканиране на таблица.

Както е споменато в документите

Защо

Ако имате индекс на a,b - и търсите по a самостоятелно - автоматично ще се използва индекс. Това е така, защото това е началото на индекса (което се прави бързо), db може просто да игнорира останалата част от стойността на индекса.

Индекс на a, b е неефективен при търсене по b сам, просто защото не дава възможност за използване на търсене в индекса с "започва с този фиксиран низ".

И така, едно от двете:

  • Включете _reference_1_id в заявката (вероятно неуместно)
  • ИЛИ добавете индекс към _reference_2_id (ако често правите заявки по полето)
  • ИЛИ използвайте подсказка

Съвет

Вероятно най-евтината ви опция в момента.

Добавете подсказка за заявка, за да използвате вашия _reference_1_id_1__reference_2_id_1_id_1 индекс. Което вероятно ще бъде много по-бързо от пълно сканиране на таблица, но все пак много по-бавно от индекс, който започва с полето, което използвате в заявката.

т.е.

db.mycoll
    .find({"_reference_2_id" : ObjectId("jkl7890123456")})
    .hint("_reference_1_id_1__reference_2_id_1_id_1");


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoError:топологията е разрушена sailsjs

  2. Показване на резултатите от GET заявката в браузър с помощта на NodeJS

  3. Ръководство за разработчици за комплекти реплики на MongoDB

  4. Azure Cosmos DB не поддържа ли MongoDB/Mongoose уникален индекс?

  5. Оптимизация на заявките на MongoDB