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

Какъв е правилният начин за индексиране в MongoDB, когато съществува голяма комбинация от полета

По принцип индексите са полезни само ако са над селективен поле. Това означава, че броят на документите, които имат определена стойност, е малък спрямо общия брой документи.

Какво означава "малък" зависи от набора от данни и заявката. Селективността от 1% е доста безопасна, когато решавате дали даден индекс има смисъл. Ако конкретна стойност съществува в, да речем, 10% от документите, извършването на сканиране на таблица може да бъде по-ефективно от използването на индекс върху съответното поле.

Имайки това предвид, някои от полетата ви ще бъдат селективни а някои няма да бъдат. Например, подозирам, че филтрирането по "OK" няма да бъде много избирателно. Можете да премахнете неселективните полета от съображенията за индексиране - ако някой иска всички поръчки, които са "ОК" без други условия, в крайна сметка ще направи сканиране на таблицата. Ако някой иска поръчки, които са „ОК“ и имат други условия, ще се използва какъвто и индекс да е приложим за други условия.

Сега, когато ви остават селективни (или поне донякъде селективни) полета, помислете кои заявки са едновременно популярни и селективни. Например, може би марка+тип би била такава комбинация. Можете да добавите съставни индекси, които съответстват на популярни заявки, които очаквате да бъдат селективни.

Сега, какво ще стане, ако някой филтрира само по марка? Това може да бъде избирателно или не в зависимост от данните. Ако вече имате комбиниран индекс за марка+тип, ще оставите на базата данни да определи дали заявката само за марка е по-ефективна за изпълнение чрез индекса марка+тип или чрез сканиране на колекция.

Продължете по този начин с други популярни заявки и полета.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как кажете на Mongo да сортира колекция, преди да ограничи резултатите?

  2. Актуализиране на обект на масив въз основа на идентификатора?

  3. Как да тествам метод, който се свързва с mongo, без всъщност да се свързва с mongo?

  4. Как да се присъедините към множество колекции с $lookup в mongodb

  5. mongodb добавя брояч към всеки извлечен документ