MongoDB Indeksiranje: createIndex() i dropIndex()

โšก Pametni saลพetak

MongoDB Indeksi pohranjuju ureฤ‘eni podskup polja kolekcije tako da upiti mogu pronaฤ‡i dokumente bez skeniranja svakog zapisa. Metode createIndex, getIndexes i dropIndex grade, popisuju i uklanjaju ove strukture kritiฤne za performanse.

  • ๐Ÿš€ Svrha: Indeksi neka MongoDB preskoฤite skeniranje cijele kolekcije za brลพe ฤitanje.
  • ๐Ÿ› ๏ธ kreirajIndeks: Izraฤ‘uje indekse s jednim poljem ili sloลพene indekse u uzlaznom ili silaznom redoslijedu.
  • ๐Ÿ” getIndexes: Navodi svaki indeks u kolekciji, ukljuฤujuฤ‡i zadani _id.
  • ๐Ÿ—‘๏ธ dropIndex: Uklanja jedan indeks; dropIndexes briลกe sve osim _id.
  • โš–๏ธ Kompromis: Previลกe indeksa usporava umetanje, aลพuriranje i brisanje.
  • ๐Ÿค– Podeลกavanje umjetne inteligencije: Asistenti automatski preporuฤuju i generiraju ispravne indekse.

MongoDB Indeksiranje createIndex dropIndex

ล to su MongoDB Indeksi?

Indeksi su vrlo vaลพni u svakoj bazi podataka, a sa MongoDB nije drugaฤije. Koriลกtenjem indeksa, izvoฤ‘enje upita u MongoDB postaje uฤinkovitiji.

Ako imate kolekciju s tisuฤ‡ama dokumenata bez indeksa, a zatim pretraลพujete kako biste pronaลกli odreฤ‘ene dokumente, u takvom sluฤaju MongoDB treba skenirati cijelu kolekciju da pronaฤ‘e dokumente. Ali ako imate indekse, MongoDB koristio bi ove indekse kako bi ograniฤio broj dokumenata koje je trebalo pretraลพivati โ€‹โ€‹u zbirci.

Indeksi su posebni skupovi podataka koji pohranjuju djelomiฤni dio podataka kolekcije. Buduฤ‡i da su podaci djelomiฤni, lakลกe ih je ฤitati. Ovaj djelomiฤni skup pohranjuje vrijednost odreฤ‘enog polja ili skupa polja, poredanih prema vrijednosti polja.

Razumijevanje utjecaja indeksa

Iako je uvod pokazao da su indeksi dobri za upite, previลกe indeksa moลพe usporiti druge operacije poput umetanja, brisanja i aลพuriranja.

Ako se na dokumentima ฤesto izvode operacije umetanja, brisanja i aลพuriranja, tada bi se indeksi morali tako ฤesto mijenjati, ลกto bi samo predstavljalo dodatno optereฤ‡enje za kolekciju.

Donji primjer pokazuje koje vrijednosti polja mogu ฤiniti indeks u kolekciji. Indeks se moลพe temeljiti na samo jednom polju u kolekciji ili na viลกe polja u kolekciji.

U donjem primjeru, Employeeid "1" i EmployeeCode โ€žAAโ€œ se koriste za indeksiranje dokumenata u zbirci. Dakle, kada se izvrลกi pretraลพivanje upita, ovi indeksi ฤ‡e se koristiti za brzo i uฤinkovito pronalaลพenje potrebnih dokumenata u zbirci.

Dakle, ฤak i ako je upit za pretraลพivanje zasnovan na zaposlenikuCode โ€žAAโ€œ, taj bi dokument bio vraฤ‡en.

Razumijevanje utjecaja indeksa

Kako stvoriti indekse: createIndex()

Izrada indeksa u MongoDB vrลกi se pomoฤ‡u createIndex metoda.

Sljedeฤ‡i primjer pokazuje kako dodati indeks kolekciji. Pretpostavimo da imamo istu kolekciju zaposlenika, koja ima nazive polja โ€žEmployeeidโ€œ i โ€žEmployeeNameโ€œ.

Izradi indekse pomoฤ‡u createIndex

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

Code Objaลกnjenje:

  1. The createIndex Metoda se koristi za stvaranje indeksa na temelju "Employeeid" dokumenta.
  2. Parametar โ€ž1โ€œ oznaฤava da kada se indeks kreira s vrijednostima polja โ€žEmployeeidโ€œ, one trebaju biti sortirane uzlaznim redoslijedom. Imajte na umu da se to razlikuje od polja _id (koje jedinstveno identificira svaki dokument) koje MongoDB automatski se stvara. Dokumenti ฤ‡e sada biti sortirani prema Employeeid-u, a ne prema polju _id.

Ako se naredba uspjeลกno izvrลกi, prikazat ฤ‡e se sljedeฤ‡i izlaz:

Izlaz:

izlaz funkcije createIndex

  1. Vrijednost numIndexesBefore: 1 oznaฤava broj vrijednosti polja u indeksima prije pokretanja naredbe. Svaka kolekcija ima polje _id, koje se takoฤ‘er raฤuna kao vrijednost polja, pa je numIndexesBefore 1.
  2. Vrijednost numIndexesAfter: 2 oznaฤava broj vrijednosti polja u indeksima nakon ลกto je naredba pokrenuta.
  3. Izlaz โ€žok: 1โ€œ oznaฤava da je operacija bila uspjeลกna i da je novi indeks dodan u kolekciju.

Gornji kod pokazuje kako stvoriti indeks na temelju jedne vrijednosti polja, ali moguฤ‡e je stvoriti i indeks na temelju viลกe vrijednosti polja. Sljedeฤ‡i primjer pokazuje kako se to moลพe uฤiniti:

Stvorite sloลพeni indeks na viลกe polja

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

Metoda createIndex sada uzima u obzir viลกe vrijednosti polja, ลกto ฤ‡e uzrokovati stvaranje indeksa na temelju "Employeeid" i "EmployeeName". Employeeid:1 i EmployeeName:1 oznaฤavaju da indeks treba stvoriti na temelju ove dvije vrijednosti polja, pri ฤemu :1 oznaฤava uzlazni redoslijed. To se naziva sloลพeni indeks.

Kako pronaฤ‡i indekse: getIndexes()

Pronalaลพenje indeksa u MongoDB vrลกi se pomoฤ‡u getIndexes metoda. Sljedeฤ‡i primjer pokazuje kako se to moลพe uฤiniti:

Pronaฤ‘ite indekse pomoฤ‡u funkcije getIndexes

db.Employee.getIndexes()

Metoda getIndexes koristi se za pronalaลพenje svih indeksa u zbirci.

Ako se naredba uspjeลกno izvrลกi, prikazat ฤ‡e se sljedeฤ‡i izlaz:

Izlaz:

izlaz funkcije getIndexes

Izlaz vraฤ‡a dokument koji pokazuje da u kolekciji postoje dva indeksa: polje _id i polje Employeeid. :1 oznaฤava da su vrijednosti polja u indeksu kreirane uzlaznim redoslijedom.

Kako ukloniti indekse: dropIndex()

Uklanjanje indeksa u MongoDB vrลกi se pomoฤ‡u dropIndex metoda. Sljedeฤ‡i primjer pokazuje kako se to moลพe uฤiniti:

Izbacivanje indeksa pomoฤ‡u dropIndexa

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

Metoda dropIndex uzima potrebne vrijednosti polja koje je potrebno ukloniti iz indeksa.

Ako se naredba uspjeลกno izvrลกi, prikazat ฤ‡e se sljedeฤ‡i izlaz:

Izlaz:

izlaz dropIndexa

  1. Vrijednost nIndexesWas: 3 oznaฤava broj vrijednosti polja u indeksima prije pokretanja naredbe. Svaka kolekcija ima polje _id, koje se takoฤ‘er raฤuna kao vrijednost polja.
  2. Izlaz ok: 1 oznaฤava da je operacija bila uspjeลกna, a polje "Employeeid" uklanja se iz indeksa.

Za uklanjanje svih indeksa odjednom u kolekciji, moลพe se koristiti naredba dropIndexes. Sljedeฤ‡i primjer pokazuje kako se to moลพe uฤiniti:

Izbriลกi sve indekse pomoฤ‡u dropIndexes

db.Employee.dropIndexes()

Metoda dropIndexes ispustit ฤ‡e sve indekse osim indeksa _id.

Ako se naredba uspjeลกno izvrลกi, prikazat ฤ‡e se sljedeฤ‡i izlaz:

Izlaz:

izlaz dropIndexes-a

  1. Vrijednost nIndexesWas: 2 oznaฤava broj vrijednosti polja u indeksima prije izvrลกavanja naredbe.
  2. Svaka kolekcija ima polje _id, koje se takoฤ‘er raฤuna kao vrijednost polja i neฤ‡e ga ukloniti MongoDB; to je ono ลกto ova poruka pokazuje.
  3. Izlaz ok: 1 oznaฤava da je operacija bila uspjeลกna.

Pitanja i odgovori

Indeks s jednim poljem sortira jedno polje i odgovara upitima koji filtriraju samo to polje. Sloลพeni indeks pokriva nekoliko polja u jednoj strukturi i odgovara upitima koji filtriraju ili sortiraju ta polja zajedno. Sloลพeni indeksi podrลพavaju do 32 polja.

Polje _id je MongoDBprimarni kljuฤ, tako da svaka kolekcija automatski dobiva jedinstveni _id indeks. Ne moลพe se izbrisati. Zato numIndexesBefore poฤinje od 1 ฤak i prije nego ลกto dodate bilo koji prilagoฤ‘eni indeks.

Pokrenite upit s .explain(โ€œexecutionStatsโ€). U pobjedniฤkom planu, IXSCAN faza znaฤi da je koriลกten indeks, dok COLLSCAN znaฤi MongoDB skenirao svaki dokument i novi indeks bi mogao pomoฤ‡i.

Koristite fazu agregacije $indexStats kako biste vidjeli koliko se ฤesto pristupa svakom indeksu. Indeksi s vrlo malom upotrebom troลกe disk i sporo zapisuju, stoga ih uklonite pomoฤ‡u dropIndexa kako biste odrลพali kolekciju minimalnom.

Alati umjetne inteligencije analiziraju zapisnike sporih upita i predlaลพu koja polja indeksirati. MongoDBSavjetnik za performanse rangira preporuke indeksa prema utjecaju, helping dodajete indekse visoke vrijednosti i preskaฤete suviลกne.

Da. AI Copilot asistenti pretvaraju zahtjeve na obiฤnom engleskom jeziku u ispravnu sintaksu createIndex, ukljuฤujuฤ‡i uzlazne ili silazne kljuฤeve i redoslijed sloลพenih polja, a zatim objaลกnjavaju rezultirajuฤ‡i indeks.

ESR je kratica za Jednakost, Sortiranje, Raspon. Prilikom izrade sloลพenog indeksa, prvo postavite polja za podudaranje jednakosti, zatim polja za sortiranje, a zatim filtere raspona. Ovaj redoslijed omoguฤ‡uje MongoDB najuฤinkovitije koristiti indeks.

Na pokriveni upit se u potpunosti odgovara iz indeksa, bez ฤitanja dokumenata. Kada se svako polje u filteru i projekciji nalazi u jednom indeksu, MongoDB brลพe vraฤ‡a rezultate.

Saลพmite ovu objavu uz: