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

Jak MongoDB wybiera plany kandydackie

Jeśli zapytanie może być spełnione przez wiele indeksów zdefiniowanych w kolekcji, MongoDB przetestuje wszystkie odpowiednie indeksy równolegle. Planer zapytań wybierze pierwszy indeks, który może zwrócić 101 wyników. Istnieją inne aspekty wyboru indeksu, ale ogólnie jest to prawdą, zgodnie z Optymalizacja zapytań dokumentacja.

Ten sposób wyboru indeksu może wybrać indeks suboptymalny. Dzieje się tak, ponieważ z punktu widzenia MongoDB masz wiele indeksów opisujących to samo. Aby złagodzić zaobserwowany nieoptymalny wybór indeksu, możesz wykonać następujące czynności:

  1. Usuń wszystkie inne indeksy, które według Ciebie są nieoptymalne.

    Ma to na celu upewnienie się, że planista zapytań nie ma innego wyboru poza wyborem indeksów dostosowanych do zapytania.

  2. Użyj hint() metoda

    hint() umożliwia jawne poinformowanie MongoDB, aby używał określonego indeksu dla zapytania. Na przykład:

    db.tasks.find(...).hint({project: 1, created_by: 1})
    

    Zobacz https://docs.mongodb.com/v2. 6/odniesienie/operator/meta/podpowiedź/ aby uzyskać więcej informacji na temat hint() .

Innym niuansem w zapytaniu jest to, że zawiera ono $or operator. W takim przypadku każdy termin w $or wyrażenie musi mieć powiązany z nim indeks , w przeciwnym razie MongoDB wykona skanowanie kolekcji (BasicCursor w terminach MongoDB 2.6). Jest to wyjaśnione bardziej szczegółowo na https://docs .mongodb.com/v2.6/reference/operator/query/lub/#zachowania




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Przełącz kolekcję w mongoengine na zapytanie wyszukiwania

  2. Jak przekonwertować pole konkretnej kolumny obiektu dtype na kolumnę ramki danych w pandach

  3. Mongodb - Ustawienie replikacji na poziomie bazy danych lub kolekcji

  4. Concat Ciąg według grupy

  5. Jak zmienić klucz odłamkowy?