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

W MongoDB używam dużego zapytania, jak stworzę indeks złożony czy indeks pojedynczy, więc mój czas odpowiedzi przyspieszył

Ogólnie rzecz biorąc, będziesz chciał umieścić indeks na polach najczęściej używanych jako kryteria filtrowania w najważniejszych/częstych zapytaniach, zaczynając od najbardziej selektywnych pól w pierwszej kolejności. Istnieją całkiem przyzwoite wskazówki na ten temat w ramach dokumentacji MongoDB . Jednym ze szczególnie interesujących stwierdzeń w twoim przypadku jest prawdopodobnie to, ponieważ masz dużo $or s:

Najważniejszą rzeczą tutaj jest jednak mierzenie, mierzenie, mierzenie i przeglądanie planów wykonania zapytań za pomocą explain() . Powodem jest to, że najprawdopodobniej będziesz mieć różne rodzaje zapytań, które Twoja aplikacja musi obsługiwać i w pewnym momencie będziesz musiał znaleźć kompromis, w którym będziesz musiał wybrać między kosztami utrzymania indeksu (np. blokady zapisu podczas aktualizacji indeksów i wymagań dotyczących miejsca na dysku) oraz teoretycznie najszybsze rozwiązanie, w którym wszystkie pola użyte w pojedynczym zapytaniu są objęte jednym indeksem.

Cały ten temat indeksowania jest trochę rozmyty, co w dużym stopniu zależy od konkretnego scenariusza:

  • Czy Twoje dane są mocno aktualizowane i czy zapisy muszą być superszybkie (potrzebujesz mniej/mniejszych indeksów), czy też dane są dość stabilne przy częstych odczytach, które muszą być szybkie (stosuj więcej/większe indeksy)?
  • Jakie rodzaje zapytań są potrzebne do obsługi? Jak bardzo są podobni pod względem filtrów? Czy niektóre kombinacje filtrów będą bardziej prawdopodobne niż inne? Które zapytania muszą działać dobrze, a które mogą być nieco wolniejsze?
  • Jak są dystrybuowane dane w potencjalnie zindeksowanych polach?
  • i tak dalej...

Nie znajdziesz pojedynczego indeksu, który pomagałby wszystkim Twoim zapytaniom działać jak najlepiej. Ponadto, dodając więcej indeksów lub zmieniając istniejące, może to spowodować, że optymalizator zapytań przestanie używać niektórych indeksów dla niektórych zapytań i zamiast tego wybierze inny plan wykonania, który może być lub nie być pożądany. Mierz więc wszystko, co jest ważne po każdej zmianie indeksowania lub fizycznego układu danych (konfiguracja sprzętu, sharding...). Wreszcie, powinieneś regularnie mierzyć wydajność zapytań w miarę wzrostu ilości danych, chyba że ich rozkład jest przewidywalnie jednolity.

Krótko mówiąc:wybierz podejście iteracyjne i zacznij od dodania indeksu (sugerowałbym dodanie go na isBlockedByAdmin , isDelete i information.shares.userId ), a następnie zmierz wydajność zapytania, a następnie doprecyzuj indeks na podstawie wyników (i znowu i znowu...).




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Błąd aktualizacji MongoDB 2.6

  2. Nie można utworzyć kopii zapasowej mongodump z --db. Uwierzytelnianie nie powiodło się

  3. Awaria Mongodb otrzymała sygnał 15 (zakończona)

  4. Jak posortować kolekcję na podstawie wartości w tablicy?

  5. Jak zaktualizować bazę danych MongoDb w Javie?