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

Proste zapytanie MongoDB jest bardzo wolne, chociaż indeks jest ustawiony

Nie masz żadnego indeksu, którego mongo automatycznie użyje do tego, więc wykonuje pełne skanowanie tabeli.

Jak wspomniano w dokumentacji

Dlaczego

Jeśli masz indeks na a,b - i szukasz według a sam - indeks zostanie użyty automatycznie. Dzieje się tak, ponieważ jest to początek indeksu (co jest szybkie do zrobienia), db może po prostu zignorować resztę wartości indeksu.

Indeks na a,b jest nieefektywny podczas wyszukiwania według b po prostu dlatego, że nie daje możliwości korzystania z wyszukiwania indeksu z "zaczyna się od tego ustalonego ciągu".

Tak więc:

  • Uwzględnij _reference_1_id w zapytaniu (prawdopodobnie nieistotne)
  • LUB dodaj indeks na _reference_2_id (jeśli często wykonujesz zapytania według tego pola)
  • LUB użyj podpowiedzi

Wskazówka

Prawdopodobnie teraz jest to najtańsza opcja.

Dodaj wskazówkę dotyczącą zapytania, aby wymusić użycie _reference_1_id_1__reference_2_id_1_id_1 indeks. Co prawdopodobnie będzie dużo szybsze niż pełne skanowanie tabeli, ale nadal dużo wolniejsze niż indeks rozpoczynający się od pola, którego używasz w zapytaniu.

czyli

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. mongodb groupby powolny nawet po dodaniu indeksu

  2. Mongodb Explain for Aggregation Framework

  3. Wstaw wartość w określonej pozycji w tablicy w MongoDB

  4. wyrzuć nową mangusę.Error.MissingSchemaError(nazwa); ^ MongooseError:Schemat nie został zarejestrowany dla sprzedawcy modeli

  5. Znajdź całkowity czas spędzony przez użytkownika w mongoDB