Indeksy są bardzo ważne w każdej bazie danych i nie inaczej jest w przypadku MongoDB. Dzięki zastosowaniu indeksów wykonywanie zapytań w MongoDB staje się bardziej wydajne.
Jeśli masz kolekcję z tysiącami dokumentów bez indeksów, a następnie wyszukujesz określone dokumenty, w takim przypadku MongoDB musiałby przeskanować całą kolekcję, aby znaleźć dokumenty. Ale gdybyś miał indeksy, MongoDB użyłby tych indeksów do ograniczenia liczby dokumentów, które trzeba było przeszukiwać w kolekcji.
Indeksy to specjalne zestawy danych, które przechowują część danych kolekcji. Ponieważ dane są częściowe, ich odczytanie staje się łatwiejsze. Ten częściowy zestaw przechowuje wartość określonego pola lub zestawu pól uporządkowanych według wartości pola.
W tym samouczku nauczysz się -
- Zrozumienie wpływu indeksów
- Jak tworzyć indeksy: createIndex ()
- Jak znaleźć indeksy: getindexes ()
- Jak usunąć indeksy: dropindex ()
Zrozumienie wpływu indeksów
Teraz, mimo że od wprowadzenia widzieliśmy, że indeksy są dobre dla zapytań, posiadanie zbyt wielu indeksów może spowolnić inne operacje, takie jak operacja wstawiania, usuwania i aktualizowania.
Jeśli na dokumentach wykonywane są często operacje wstawiania, usuwania i aktualizowania, indeksy musiałyby zmieniać się tak często, co byłoby po prostu narzutem na kolekcję.
Poniższy przykład przedstawia przykład tego, jakie wartości pól mogą stanowić indeks w kolekcji. Indeks może opierać się tylko na jednym polu w kolekcji lub na wielu polach w kolekcji.
W poniższym przykładzie identyfikator pracownika „1” i kod pracownika „AA” są używane do indeksowania dokumentów w kolekcji. Dlatego podczas wyszukiwania za pomocą kwerendy te indeksy zostaną użyte do szybkiego i wydajnego znalezienia wymaganych dokumentów w kolekcji.
Więc nawet jeśli zapytanie wyszukiwania jest oparte na EmployeeCode „AA”, ten dokument zostanie zwrócony.
Jak tworzyć indeksy: createIndex ()
Tworzenie indeksu w MongoDB odbywa się za pomocą metody „ createIndex ”.
Poniższy przykład pokazuje, jak dodać indeks do kolekcji. Załóżmy, że mamy tę samą kolekcję Employee, która ma nazwy pól „Employeeid” i „EmployeeName”.
db.Employee.createIndex({Employeeid:1})
Objaśnienie kodu:
- Metoda createIndex służy do tworzenia indeksu na podstawie „Employeeid” dokumentu.
- Parametr „1” wskazuje, że kiedy indeks jest tworzony z wartościami pola „Identyfikator pracownika”, powinny one być sortowane w kolejności rosnącej. Należy pamiętać, że różni się to od pola _id (pole id służy do jednoznacznej identyfikacji każdego dokumentu w kolekcji), które jest tworzone automatycznie w kolekcji przez MongoDB. Dokumenty będą teraz sortowane według identyfikatora pracownika, a nie pola _id.
Jeśli polecenie zostanie wykonane pomyślnie, zostanie wyświetlony następujący wynik:
Wynik:
- Wartość numIndexesBefore: 1 wskazuje liczbę wartości pól (rzeczywistych pól w kolekcji), które znajdowały się w indeksach przed uruchomieniem polecenia. Pamiętaj, że każda kolekcja ma pole _id, które jest również liczone jako wartość pola w indeksie. Ponieważ pole indeksu _id jest częścią kolekcji podczas jej tworzenia, wartość numIndexesBefore wynosi 1.
- Wartość numIndexesAfter: 2 wskazuje liczbę wartości pól, które znajdowały się w indeksach po uruchomieniu polecenia.
- Tutaj dane wyjściowe „ok: 1” wskazują, że operacja się powiodła i nowy indeks jest dodawany do kolekcji.
Powyższy kod pokazuje, jak utworzyć indeks na podstawie jednej wartości pola, ale można również utworzyć indeks na podstawie wielu wartości pól.
Poniższy przykład pokazuje, jak można to zrobić;
db.Employee.createIndex({Employeeid:1, EmployeeName:1])
Objaśnienie kodu:
- Metoda createIndex bierze teraz pod uwagę wiele wartości Field, które spowodują teraz utworzenie indeksu na podstawie „Employeeid” i „EmployeeName”. Employeeid: 1 i EmployeeName: 1 wskazują, że indeks powinien zostać utworzony na tych 2 wartościach pól, przy czym: 1 wskazuje, że powinien być w porządku rosnącym.
Jak znaleźć indeksy: getindexes ()
Wyszukiwanie indeksu w MongoDB odbywa się za pomocą metody „getIndexes” .
Poniższy przykład pokazuje, jak można to zrobić;
db.Employee.getIndexes()
Objaśnienie kodu:
- Metoda getIndexes służy do znajdowania wszystkich indeksów w kolekcji.
Jeśli polecenie zostanie wykonane pomyślnie, zostanie wyświetlony następujący wynik:
Wynik:
- Dane wyjściowe zwracają dokument, który po prostu pokazuje, że w kolekcji są 2 indeksy, czyli pole _id, a drugi to pole Identyfikator pracownika. Wartość: 1 wskazuje, że wartości pól w indeksie są tworzone w porządku rosnącym.
Jak usunąć indeksy: dropindex ()
Usunięcie indeksu w MongoDB odbywa się za pomocą metody dropIndex.
Poniższy przykład pokazuje, jak można to zrobić;
db.Employee.dropIndex(Employeeid:1)
Objaśnienie kodu:
- Metoda dropIndex przyjmuje wymagane wartości Field, które należy usunąć z indeksu.
Jeśli polecenie zostanie wykonane pomyślnie, zostanie wyświetlony następujący wynik:
Wynik:
- Wartość nIndexesWas: 3 wskazuje liczbę wartości pól, które znajdowały się w indeksach przed uruchomieniem polecenia. Pamiętaj, że każda kolekcja ma pole _id, które jest również liczone jako wartość pola w indeksie.
- Dane wyjściowe ok: 1 wskazują, że operacja się powiodła, a pole „Identyfikator pracownika” jest usuwane z indeksu.
Aby usunąć wszystkie indeksy naraz w kolekcji, można użyć polecenia dropIndexes.
Poniższy przykład pokazuje, jak można to zrobić.
db.Employee.dropIndex()
Objaśnienie kodu:
- Metoda dropIndexes usunie wszystkie indeksy z wyjątkiem indeksu _id.
Jeśli polecenie zostanie wykonane pomyślnie, zostanie wyświetlony następujący wynik:
Wynik:
- Wartość nIndexesWas: 2 wskazuje liczbę wartości pól, które znajdowały się w indeksach przed uruchomieniem polecenia.
- Pamiętaj, że każda kolekcja ma pole _id, które jest również liczone jako wartość pola w indeksie i nie zostanie usunięte przez MongoDB i właśnie to wskazuje ten komunikat.
- Wyjście ok: 1 wskazuje, że operacja się powiodła.
Podsumowanie
- Definiowanie indeksów jest ważne dla szybszego i wydajnego wyszukiwania dokumentów w kolekcji.
- Indeksy można tworzyć przy użyciu metody createIndex. Indeksy można tworzyć tylko dla jednego pola lub wielu wartości pól.
- Indeksy można znaleźć za pomocą metody getIndexes.
- Indeksy można usunąć za pomocą dropIndex dla pojedynczych indeksów lub dropIndexes dla usunięcia wszystkich indeksów.