TLDR: Indeksowanie jest po prostu sposobem grupowania dokumentów, dzielenia kolekcji na grupy w celu przyspieszenia działania
Przegląd
Indeksy zwiększają wydajność zapytań, jak również są używane do wyszukiwania
Pomysł indeksowania w MongoDB jest podobny do indeksu każdej książki, zwiększają one szybkość znajdowania strony. Indeks w MongoDB zwiększa szybkość znajdowania dokumentów
Jak działają indeksy?
Po pierwsze, zrozummy jak deklaruje się indeks w MongoDB
collectionName.createIndex({field:value}) //for creating indexcollectionName.dropIndex({field:value}) //for removing index
Tutaj pole jest „fieldName”, które będzie indeksowane. „Value” może być -1 lub 1 lub „text”.
To definiuje typ indeksu, 1 lub -1 zwiększają wydajność zapytania find() podczas gdy „text” jest używany do wyszukiwania.
1 i -1 dają kolejność indeksu. Ascending = -1 & Descending =1
Teraz, jak indeksy działają pod maską?
Wyobraźmy sobie kolekcję użytkowników, każdy dokument zawierający różne informacje, jedną z nich jest wynik.
Powiedzmy, że chcemy, aby wszyscy użytkownicy uzyskali wynik 23.
Gdy nie istnieje żaden indeks, MongoDB przechodzi przez każdy dokument, aby znaleźć żądany dokument, To jest nazywane skanowaniem kolekcji, MongoDB ma skrót dla tego COLLSCAN (To jest nazywane skanowaniem tabeli w relacyjnych bazach danych)
Jak możemy to zoptymalizować?
Aby to zoptymalizować, możemy utworzyć tabelę z jedną kolumną dla wyniku i inną kolumną dla referencji, która będzie zawierać identyfikatory dokumentów z tym konkretnym wynikiem. Teraz musimy przeskanować tylko tę tabelę, zamiast skanować całą bazę danych. Jest to znacznie szybsze. To jest dokładnie to, czym jest indeks.
Indeksy pomagają MongoDB zawęzić zbiór danych, który będzie musiał przeskanować. Nazywa się to skanowaniem indeksowym, MongoDB ma na to również skrót IXNSCAN
Tutaj jest wizualna reprezentacja wyniku Indeksu i jego mapowania.
Poprawa wydajności przez Indeks jest widoczna tylko wtedy, gdy liczba dokumentów przekracza 100K lub więcej.
Możesz sam to porównać porównując dwa zapytania jedno z indeksowanym polem i jedno bez Indeksu
db.<collection name>.find(query).explain()
Zwrócony zostanie obiekt
object.winingPlan.stage poda typ skanowania COLLSCAN lub IXNSCAN
ale nie poda czasu wykonania
stosuj metodę explain(’executionStat’) przed metodą zapytania jak find
.
db.<collection name>explain('executionStat').find(query)
executionTimeMillis powie ci czas potrzebny na wykonanie
Downsides of Index
Indeksy nie są darmowe, Indeksy kosztują miejsce. Indeksy mogą zwiększyć prędkość odczytu, ale za każdym razem, gdy coś jest napisane, indeks musi zostać zaktualizowany, aby to rozwiązać, używamy drzewa B, wykonujemy pewne obliczenia przed wstawieniem, więc jest to szybsze.
Drzewo B
Indeksy nie są tabelą grup, koncepcyjnie jest to właściwie drzewo B (drzewo binarne), nie tylko MongoDB, baza danych SQL również używa drzewa B do indeksowania
to wideo najlepiej wyjaśnia drzewo B
.