MongoDB Indeksowanie: createIndex() i dropIndex()

โšก Inteligentne podsumowanie

MongoDB Indeksy przechowujฤ… uporzฤ…dkowany podzbiรณr pรณl kolekcji, dziฤ™ki czemu zapytania mogฤ… lokalizowaฤ‡ dokumenty bez koniecznoล›ci skanowania kaลผdego rekordu. Metody createIndex, getIndexes i dropIndex budujฤ…, wyล›wietlajฤ… i usuwajฤ… te krytyczne dla wydajnoล›ci struktury.

  • ๐Ÿš€ Cel: Indeksy pozwalajฤ… MongoDB pomiล„ skanowanie caล‚ej kolekcji, aby szybciej dokonaฤ‡ odczytu.
  • ๐Ÿ› ๏ธ. utwรณrzIndeks: Tworzy indeksy jednopolowe lub zล‚oลผone w kolejnoล›ci rosnฤ…cej lub malejฤ…cej.
  • ๐Ÿ” pobierzIndexes: Wyล›wietla wszystkie indeksy w kolekcji, ล‚ฤ…cznie z domyล›lnym _id.
  • ๐Ÿ—‘๏ธ dropIndex: Usuwa jeden indeks; dropIndexes czyล›ci wszystkie oprรณcz _id.
  • โš–๏ธ. Kompromis: Zbyt duลผa liczba indeksรณw spowalnia operacje wstawiania, aktualizacji i usuwania.
  • ๐Ÿค– Strojenie sztucznej inteligencji: Asystenci automatycznie rekomendujฤ… i generujฤ… wล‚aล›ciwe indeksy.

MongoDB Indeksowanie createIndex dropIndex

Jakie sฤ… MongoDB Indeksy?

Indeksy sฤ… bardzo waลผne w kaลผdej bazie danych MongoDB nie jest inaczej. Korzystajฤ…c z indeksรณw, wykonujฤ…c zapytania w MongoDB staje siฤ™ bardziej wydajny.

Jeล›li posiadasz kolekcjฤ™ skล‚adajฤ…cฤ… siฤ™ z tysiฤ™cy dokumentรณw bez indeksรณw i nastฤ™pnie wykonujesz zapytanie w celu znalezienia okreล›lonych dokumentรณw, to w takim przypadku MongoDB musiaล‚by przeskanowaฤ‡ caล‚ฤ… kolekcjฤ™, aby znaleลบฤ‡ dokumenty. Ale gdybyล› miaล‚ indeksy, MongoDB korzystaล‚by z tych indeksรณw, aby ograniczyฤ‡ liczbฤ™ dokumentรณw, ktรณre naleลผaล‚o przeszukaฤ‡ w zbiorze.

Indeksy to specjalne zestawy danych, ktรณre przechowujฤ… czฤ™ล›ciowฤ… czฤ™ล›ฤ‡ danych kolekcji. Poniewaลผ dane sฤ… czฤ™ล›ciowe, ich odczyt staje siฤ™ ล‚atwiejszy. Ten czฤ™ล›ciowy zestaw przechowuje wartoล›ฤ‡ okreล›lonego pola lub zestawu pรณl, uporzฤ…dkowanych wedล‚ug wartoล›ci pola.

Zrozumienie wpล‚ywu indeksรณw

Mimo ลผe we wstฤ™pie pokazano, ลผe indeksy sฤ… przydatne w przypadku zapytaล„, zbyt duลผa liczba indeksรณw moลผe spowalniaฤ‡ inne operacje, takie jak wstawianie, usuwanie i aktualizowanie.

Jeล›li operacje wstawiania, usuwania i aktualizowania dokumentรณw sฤ… wykonywane czฤ™sto, indeksy muszฤ… byฤ‡ czฤ™sto zmieniane, co jest jedynie obciฤ…ลผeniem dla kolekcji.

Poniลผszy przykล‚ad pokazuje, jakie wartoล›ci pรณl mogฤ… stanowiฤ‡ indeks w kolekcji. Indeks moลผe opieraฤ‡ siฤ™ na jednym polu w kolekcji lub na wielu polach w kolekcji.

W poniลผszym przykล‚adzie Employeeid โ€ž1โ€ i EmployeeCode Indeksy โ€žAAโ€ sล‚uลผฤ… do indeksowania dokumentรณw w kolekcji. Dziฤ™ki temu, po przeprowadzeniu wyszukiwania, indeksy te pozwolฤ… na szybkie i efektywne znalezienie potrzebnych dokumentรณw w kolekcji.

Tak wiฤ™c nawet jeล›li zapytanie wyszukiwania opiera siฤ™ na pracownikuCode โ€žAAโ€ โ€“ ten dokument zostanie zwrรณcony.

Zrozumienie wpล‚ywu indeksรณw

Jak tworzyฤ‡ indeksy: createIndex()

Tworzenie indeksu w MongoDB odbywa siฤ™ za pomocฤ… utwรณrzIndeks Metoda.

Poniลผszy przykล‚ad pokazuje, jak dodaฤ‡ indeks do kolekcji. Zaล‚รณลผmy, ลผe mamy tฤ™ samฤ… kolekcjฤ™ โ€žPracownicyโ€, ktรณrej pola majฤ… nazwy โ€žEmployeeidโ€ i โ€žEmployeeNameโ€.

Utwรณrz indeksy za pomocฤ… createIndex

db.Employee.createIndex({Employeeid:1})

Code Wyjaล›nienie:

  1. utwรณrzIndeks metoda sล‚uลผy do tworzenia indeksu na podstawie โ€žEmployeeidโ€ dokumentu.
  2. Parametr โ€ž1โ€ oznacza, ลผe โ€‹โ€‹po utworzeniu indeksu z wartoล›ciami pola โ€žEmployeeidโ€ naleลผy je posortowaฤ‡ rosnฤ…co. Naleลผy pamiฤ™taฤ‡, ลผe rรณลผni siฤ™ to od pola _id (ktรณre jednoznacznie identyfikuje kaลผdy dokument), ktรณre MongoDB Tworzy siฤ™ automatycznie. Dokumenty bฤ™dฤ… teraz sortowane wedล‚ug pola Employeeid, a nie _id.

Jeล›li polecenie zostanie wykonane pomyล›lnie, wyล›wietlony zostanie nastฤ™pujฤ…cy komunikat:

Wyjล›cie:

wyjล›cie createIndex

  1. Wartoล›ฤ‡ numIndexesBefore: 1 wskazuje liczbฤ™ wartoล›ci pรณl w indeksach przed uruchomieniem polecenia. Kaลผda kolekcja ma pole _id, ktรณre rรณwnieลผ jest traktowane jako wartoล›ฤ‡ pola, wiฤ™c numIndexesBefore wynosi 1.
  2. numIndexesAfter: 2 wskazuje liczbฤ™ wartoล›ci pรณl w indeksach po uruchomieniu polecenia.
  3. Wynik โ€žok: 1โ€ oznacza, ลผe โ€‹โ€‹operacja zakoล„czyล‚a siฤ™ powodzeniem i nowy indeks zostaล‚ dodany do kolekcji.

Powyลผszy kod pokazuje, jak utworzyฤ‡ indeks na podstawie wartoล›ci jednego pola, ale moลผna rรณwnieลผ utworzyฤ‡ indeks na podstawie wielu wartoล›ci pรณl. Poniลผszy przykล‚ad pokazuje, jak to zrobiฤ‡:

Utwรณrz indeks zล‚oลผony w wielu polach

db.Employee.createIndex({Employeeid:1, EmployeeName:1})

Metoda createIndex uwzglฤ™dnia teraz wiele wartoล›ci pรณl, co spowoduje utworzenie indeksu na podstawie wartoล›ci โ€žEmployeeidโ€ i โ€žEmployeeNameโ€. Wartoล›ci Employeeid:1 i EmployeeName:1 wskazujฤ…, ลผe indeks powinien zostaฤ‡ utworzony na podstawie tych dwรณch wartoล›ci pรณl, a :1 oznacza kolejnoล›ฤ‡ rosnฤ…cฤ…. Jest to tzw. indeks zล‚oลผony.

Jak znaleลบฤ‡ indeksy: getIndexes()

Znalezienie indeksu w MongoDB odbywa siฤ™ za pomocฤ… pobierzIndeksy metoda. Poniลผszy przykล‚ad pokazuje, jak to zrobiฤ‡:

Znajdลบ indeksy za pomocฤ… getIndexes

db.Employee.getIndexes()

Metoda getIndexes sล‚uลผy do wyszukiwania wszystkich indeksรณw w kolekcji.

Jeล›li polecenie zostanie wykonane pomyล›lnie, wyล›wietlony zostanie nastฤ™pujฤ…cy komunikat:

Wyjล›cie:

wyjล›cie getIndexes

Wynik zwraca dokument, ktรณry pokazuje, ลผe w kolekcji znajdujฤ… siฤ™ dwa indeksy: pole _id i pole Employeeid. Wartoล›ฤ‡ :1 oznacza, ลผe โ€‹โ€‹wartoล›ci pรณl w indeksie sฤ… tworzone w kolejnoล›ci rosnฤ…cej.

Jak usuwaฤ‡ indeksy: dropIndex()

Usuwanie indeksu w MongoDB odbywa siฤ™ za pomocฤ… dropIndex metoda. Poniลผszy przykล‚ad pokazuje, jak to zrobiฤ‡:

Usuล„ indeksy za pomocฤ… dropIndex

db.Employee.dropIndex({Employeeid:1})

Metoda dropIndex przyjmuje wymagane wartoล›ci pรณl, ktรณre naleลผy usunฤ…ฤ‡ z indeksu.

Jeล›li polecenie zostanie wykonane pomyล›lnie, wyล›wietlony zostanie nastฤ™pujฤ…cy komunikat:

Wyjล›cie:

wyjล›cie dropIndex

  1. Wartoล›ฤ‡ nIndexesWas: 3 wskazuje liczbฤ™ wartoล›ci pรณl w indeksach przed uruchomieniem polecenia. Kaลผda kolekcja ma pole _id, ktรณre rรณwnieลผ jest traktowane jako wartoล›ฤ‡ pola.
  2. Wynik ok: 1 oznacza, ลผe โ€‹โ€‹operacja zakoล„czyล‚a siฤ™ powodzeniem, a pole โ€žEmployeeidโ€ zostaje usuniฤ™te z indeksu.

Aby usunฤ…ฤ‡ wszystkie indeksy z kolekcji naraz, moลผna uลผyฤ‡ polecenia dropIndexes. Poniลผszy przykล‚ad pokazuje, jak to zrobiฤ‡:

Usuล„ wszystkie indeksy za pomocฤ… dropIndexes

db.Employee.dropIndexes()

Metoda dropIndexes usunie wszystkie indeksy z wyjฤ…tkiem indeksu _id.

Jeล›li polecenie zostanie wykonane pomyล›lnie, wyล›wietlony zostanie nastฤ™pujฤ…cy komunikat:

Wyjล›cie:

wyjล›cie dropIndexes

  1. nIndexesWas: 2 wskazuje liczbฤ™ wartoล›ci pรณl w indeksach przed uruchomieniem polecenia.
  2. Kaลผda kolekcja ma pole _id, ktรณre rรณwnieลผ jest traktowane jako wartoล›ฤ‡ pola i nie zostanie usuniฤ™te przez MongoDB; to wล‚aล›nie wskazuje ta wiadomoล›ฤ‡.
  3. Wyjล›cie ok: 1 oznacza, ลผe โ€‹โ€‹operacja zakoล„czyล‚a siฤ™ powodzeniem.

FAQ

Indeks jednopolowy sortuje jedno pole i odpowiada zapytaniom filtrujฤ…cym tylko to pole. Indeks zล‚oลผony obejmuje kilka pรณl w jednej strukturze i odpowiada zapytaniom filtrujฤ…cym lub sortujฤ…cym te pola ล‚ฤ…cznie. Indeksy zล‚oลผone obsล‚ugujฤ… do 32 pรณl.

Pole _id to MongoDBKlucz podstawowy 's, wiฤ™c kaลผda kolekcja automatycznie otrzymuje unikalny indeks _id. Nie moลผna go usunฤ…ฤ‡. Dlatego numIndexesBefore zaczyna siฤ™ od 1, nawet zanim dodasz jakikolwiek niestandardowy indeks.

Uruchom zapytanie za pomocฤ… .explain(โ€œexecutionStatsโ€). W zwyciฤ™skim planie etap IXSCAN oznacza uลผycie indeksu, natomiast etap COLLSCAN oznacza MongoDB przeskanuj kaลผdy dokument, a nowy indeks moลผe okazaฤ‡ siฤ™ pomocny.

Uลผyj etapu agregacji $indexStats, aby sprawdziฤ‡, jak czฤ™sto uzyskiwany jest dostฤ™p do kaลผdego indeksu. Indeksy o bardzo niskim wykorzystaniu marnujฤ… miejsce na dysku i powolne zapisy, dlatego usuล„ je za pomocฤ… dropIndex, aby utrzymaฤ‡ kolekcjฤ™ w czystoล›ci.

Narzฤ™dzia AI analizujฤ… dzienniki powolnych zapytaล„ i sugerujฤ…, ktรณre pola naleลผy indeksowaฤ‡. MongoDBDoradca ds. wydajnoล›ci ocenia rekomendacje indeksowe wedล‚ug wpล‚ywu, helping dodajesz indeksy o wysokiej wartoล›ci i pomijasz te zbฤ™dne.

Tak. Asystenci AI Copilot przeksztaล‚cajฤ… zapytania w zwykล‚ym jฤ™zyku angielskim na poprawnฤ… skล‚adniฤ™ polecenia createIndex, uwzglฤ™dniajฤ…c rosnฤ…cฤ… lub malejฤ…cฤ… kolejnoล›ฤ‡ kluczy oraz zล‚oลผonฤ… kolejnoล›ฤ‡ pรณl, a nastฤ™pnie objaล›niajฤ… otrzymany indeks.

ESR to skrรณt od โ€žRรณwnoล›ฤ‡, Sortowanie, Zakresโ€. Podczas tworzenia indeksu zล‚oลผonego najpierw naleลผy umieล›ciฤ‡ pola zgodne z rรณwnoล›ciฤ…, nastฤ™pnie pola sortowania, a na koล„cu filtry zakresรณw. To uporzฤ…dkowanie pozwala MongoDB jak najefektywniej wykorzystaฤ‡ indeks.

Na zapytanie objฤ™te zakresem odpowiedzi udziela siฤ™ w caล‚oล›ci z indeksu, bez czytania dokumentรณw. Gdy kaลผde pole w filtrze i projekcji znajduje siฤ™ w jednym indeksie, MongoDB zwraca wyniki szybciej.

Podsumuj ten post nastฤ™pujฤ…co: