Jak ulepszyć zapytania za pomocą indeksowania MongoDB

Jak Ulepszyc Zapytania Za Pomoca Indeksowania Mongodb



Zwiększanie szybkości zapytań jest niezbędne w przypadku MongoDB i wszystkich innych systemów baz danych. Budując struktury danych, które pomagają MongoDB szybciej identyfikować rekordy, indeksowanie jest skutecznym podejściem do przyspieszania i optymalizacji wyszukiwań. Indeksy zawierają kopie niektórych danych z rejestrów, aby zapytania były bardziej efektywne. Usprawnia to wysiłek związany z odpowiadaniem na żądania w MongoDB. W tym przewodniku omówimy wykorzystanie indeksów za pomocą różnych typów indeksowania.

Utwórz kolekcję

Przed użyciem indeksów musimy utworzyć nową kolekcję w naszej MongoDB. Stworzyliśmy już jeden i wstawiliśmy 10 dokumentów o nazwie „Dummy”. Funkcja find() MongoDB wyświetla wszystkie rekordy z kolekcji „Dummy” na ekranie powłoki MongoDB poniżej.

test> db.Dummy.find()







Wybierz Typ indeksowania

Przed ustaleniem indeksu należy najpierw określić kolumny, które będą powszechnie używane w kryteriach zapytań. Indeksy dobrze sprawdzają się w przypadku kolumn, które są często filtrowane, sortowane lub przeszukiwane. Pola o dużej liczności (wiele różnych wartości) są często doskonałymi opcjami indeksowania. Oto kilka przykładów kodu dla różnych typów indeksów.



Przykład 01: Indeks pojedynczego pola

Jest to prawdopodobnie najbardziej podstawowy typ indeksu, który indeksuje pojedynczą kolumnę, aby zwiększyć szybkość wykonywania zapytań w tej kolumnie. Ten typ indeksu jest używany w przypadku zapytań, w których do sprawdzania rekordów kolekcji używane jest jedno pole klucza. Załóżmy, że używasz pola „typ” do wysyłania zapytań do rekordów kolekcji „Dummy” w ramach funkcji wyszukiwania, jak poniżej. To polecenie przeszuka całą kolekcję, co może zająć dużo czasu w przypadku dużych kolekcji. Dlatego musimy zoptymalizować wydajność tego zapytania.



test> db.Dummy.find({typ: „emp” })





Rekordy powyższej kolekcji Dummy zostały znalezione przy użyciu pola „typ”, tj. zawierającego warunek. Dlatego też można tutaj zastosować indeks jednokluczowy w celu optymalizacji zapytania wyszukiwania. Zatem użyjemy funkcji createIndex() MongoDB do utworzenia indeksu w polu „typ” kolekcji „Dummy”. Ilustracja użycia tego zapytania przedstawia pomyślne utworzenie jednokluczowego indeksu o nazwie „typ_1” w powłoce.

test> db.Dummy.createIndex({typ: 1 })

Użyjmy zapytania find(), gdy zyska ono na wykorzystaniu pola „typ”. Operacja będzie teraz znacznie szybsza niż poprzednio używana funkcja find(), ponieważ indeks jest już na miejscu, ponieważ MongoDB może wykorzystać indeks do szybkiego pobrania rekordów z żądanym stanowiskiem.



test> db.Dummy.find({typ: „emp” })

Przykład 02: Indeks złożony

W pewnych okolicznościach możemy chcieć szukać przedmiotów w oparciu o różne kryteria. Implementacja indeksu złożonego dla tych pól może pomóc poprawić wydajność zapytań. Załóżmy, że tym razem chcesz przeszukać kolekcję „Dummy” przy użyciu wielu pól zawierających różne warunki wyszukiwania w miarę wyświetlania zapytania. To zapytanie szukało rekordów w kolekcji, w której pole „type” ma wartość „emp”, a pole „sal” ma wartość większą niż 350.

Do zastosowania warunku do pola „sal” użyto operatora logicznego $gte. Po przeszukaniu całego zbioru, na który składa się 10 rekordów, zwrócono w sumie dwa rekordy.

test> db.Dummy.find({typ: „emp” , sal: {$gte: 350 } })

Utwórzmy indeks złożony dla powyższego zapytania. Ten indeks złożony ma pola „type” i „sal”. Liczby „1” i „-1” oznaczają odpowiednio porządek rosnący i malejący dla pól „typ” i „sal”. Kolejność kolumn indeksu złożonego jest istotna i powinna odpowiadać wzorcom zapytań. MongoDB nadało nazwę „type_1_sal_-1” temu indeksowi złożonemu, tak jak jest wyświetlana.

test> db.Dummy.createIndex({typ: 1 , będzie:- 1 })

Po użyciu tego samego zapytania find() do wyszukiwania rekordów z wartością pola „type” jako „emp” i wartością pola „sal” większą niż 350, otrzymaliśmy ten sam wynik z niewielką zmianą kolejności w porównaniu z wynikami poprzedniego zapytania. Większy rekord wartości dla pola „sal” znajduje się teraz na pierwszym miejscu, podczas gdy najmniejszy jest na najniższym zgodnie z „-1” ustawionym dla pola „sal” w powyższym indeksie złożonym.

test> db.Dummy.find({typ: „emp” , sal: {$gte: 350 } })

Przykład 03: Indeks tekstowy

Czasami możesz spotkać się z sytuacją, w której powinieneś zająć się dużym zbiorem danych, np. dużymi opisami produktów, składników itp. Indeks tekstowy może być przydatny do wyszukiwania pełnotekstowego w dużym polu tekstowym. Na przykład w naszej testowej bazie danych utworzyliśmy nową kolekcję o nazwie „Test”. W sumie wstawiono 6 rekordów do tej kolekcji przy użyciu funkcji wstawMany() zgodnie z poniższym zapytaniem find().

test> db.Test.insertMany([

{nazwa: „Ana” z: „Mieszka w Londynie i jest dobrą nauczycielką” },

{nazwa: „Robert” z: „To niesamowity piłkarz” },

{nazwa: 'z' z: „Być może podróżuję po Dubaju” },

{nazwa: 'Jakub' z: „Jest oszałamiający i bogaty”. },

{nazwa: „Cillian” z: „Filmowy super start zyskał sławę w ciągu kilku sekund” },

{nazwa: 'Rozpoznać' z: „Miłośniczka jedzenia. Ona też może zjeść ciebie”. }

])

Teraz utworzymy indeks tekstowy w polu „Des” tej kolekcji, korzystając z funkcji createIndex() MongoDB. Słowo kluczowe „text” w wartości pola wyświetla typ indeksu, który jest indeksem „tekstowym”. Nazwa indeksu des_text została wygenerowana automatycznie.

test> db.Test.createIndex({des: 'tekst' })

Teraz funkcja find() została użyta do przeprowadzenia „wyszukiwania tekstu” w kolekcji za pomocą indeksu „des_text”. Operator $search został użyty do wyszukania słowa „jedzenie” w rekordach kolekcji i wyświetlenia tego konkretnego rekordu.

test> db.Test.find({ $text: { $search: 'żywność' }});

Sprawdź indeksy:

Możesz sprawdzić i wyświetlić listę wszystkich zastosowanych indeksów różnych kolekcji w swojej MongoDB. W tym celu użyj metody getIndexes() wraz z nazwą kolekcji na ekranie powłoki MongoDB. Użyliśmy tego polecenia osobno dla kolekcji „Test” i „Dummy”. Spowoduje to wyświetlenie na ekranie wszystkich niezbędnych informacji dotyczących wbudowanych i zdefiniowanych przez użytkownika indeksów.

test> db.Test.getIndexes()

test> db.Dummy.getIndexes()

Upuść indeksy:

Czas usunąć indeksy, które zostały wcześniej utworzone dla kolekcji za pomocą funkcji dropIndex() wraz z tą samą nazwą pola, do której został zastosowany indeks. Poniższe zapytanie pokazuje, że pojedynczy indeks został usunięty.

test> db.Dummy.dropIndex({typ: 1 })

W ten sam sposób można usunąć indeks złożony.

test> db.Dummy.drop indeks({typ: 1 , będzie: 1 })

Wniosek

Przyspieszając pobieranie danych z MongoDB, indeksowanie jest niezbędne dla zwiększenia wydajności zapytań. W przypadku braku indeksów MongoDB musi przeszukać całą kolekcję w poszukiwaniu pasujących rekordów, co staje się mniej skuteczne wraz ze wzrostem rozmiaru zestawu. Zdolność MongoDB do szybkiego wyszukiwania właściwych rekordów przy wykorzystaniu struktury bazy danych indeksowych przyspiesza przetwarzanie zapytań w przypadku zastosowania odpowiedniego indeksowania.