Hur man förbättrar frågor med MongoDB-indexering

Hur Man Forbattrar Fragor Med Mongodb Indexering



Att förbättra frågehastigheten är viktigt för MongoDB och alla andra databassystem. Genom att bygga datastrukturer som hjälper MongoDB att identifiera poster snabbare är indexering ett kraftfullt tillvägagångssätt för att påskynda och optimera sökningar. Index inkluderar kopior av en del av data från register för att göra förfrågningar mer effektiva. Detta effektiviserar arbetet med att svara på förfrågningar i MongoDB. I den här guiden kommer vi att diskutera användningen av index med hjälp av olika indexeringstyper.

Skapa samling

Innan vi använder index måste vi skapa en ny samling i vår MongoDB. Vi har redan skapat ett och infogat 10 dokument, som heter 'Dummy'. Find() MongoDB-funktionen visar alla poster från 'Dummy'-samlingen på MongoDB-skalskärmen nedan.

test> db.Dummy.find()







Välj Indexeringstyp

Innan du upprättar ett index måste du först fastställa vilka kolumner som vanligtvis kommer att användas i frågekriterier. Index fungerar bra på kolumner som ofta filtreras, sorteras eller genomsöks. Fält med stor kardinalitet (många olika värden) är ofta utmärkta indexeringsalternativ. Här är några kodexempel för olika indextyper.



Exempel 01: Single Field Index

Det är förmodligen den mest grundläggande typen av index, som indexerar en enda kolumn för att öka frågehastigheten på den kolumnen. Den här typen av index används för frågor där du använder ett enda nyckelfält för att fråga samlingsposterna. Antag att du använder 'typ'-fältet för att fråga posterna för samlingen 'Dummy' i sökfunktionen enligt nedan. Detta kommando skulle titta igenom hela samlingen, vilket kan ta lång tid för stora samlingar att bearbeta. Därför måste vi optimera prestandan för den här frågan.



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





Posterna från Dummy-samlingen ovan har hittats med hjälp av 'typ'-fältet, dvs. innehåller ett villkor. Därför kan indexet med en nyckel användas här för att optimera sökfrågan. Så vi kommer att använda funktionen createIndex() i MongoDB för att skapa ett index på 'typ'-fältet i samlingen 'Dummy'. Illustrationen av att använda den här frågan visar hur framgångsrikt ett index med en nyckel med namnet 'type_1' skapades på skalet.

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

Låt oss använda sökfrågan find() när den får nytta av fältet 'typ'. Operationen kommer att vara betydligt snabbare nu än den tidigare använda find()-funktionen eftersom indexet är på plats eftersom MongoDB kan använda indexet för att snabbt hämta posterna med den begärda befattningen.



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

Exempel 02: Sammansatt index

Vi kanske vill leta efter föremål baserat på olika kriterier under vissa omständigheter. Genom att implementera ett sammansatt index för dessa fält kan du förbättra frågeprestanda. Låt oss säga att du den här gången vill söka från samlingen 'Dummy' med hjälp av flera fält som innehåller olika sökvillkor som frågan visas. Den här frågan har sökt efter poster från samlingen där 'typ'-fältet är inställt på 'emp' och 'sal'-fältet är större än 350.

Den logiska operatorn $gte har använts för att tillämpa villkoret på fältet 'sal'. Totalt två skivor återlämnades efter att ha letat igenom hela samlingen, som består av 10 skivor.

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

Låt oss skapa ett sammansatt index för den ovannämnda frågan. Detta sammansatta index har 'typ' och 'sal'-fält. Siffrorna '1' och '-1' representerar stigande respektive fallande ordning för fälten 'typ' och 'sal'. Sekvensen för det sammansatta indexets kolumner är viktig och bör motsvara frågemönstren. MongoDB har gett namnet 'type_1_sal_-1' till detta sammansatta index som visas.

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

Efter att ha använt samma find()-fråga för att söka efter poster med 'type'-fältvärdet som 'emp' och värdet på 'sal'-fältet större än lika med 350, har vi fått samma utdata med en liten förändring i ordningen jämfört med föregående frågeresultat. Den större värdeposten för 'sal'-fältet är nu på första plats, medan den minsta är som lägst enligt '-1' satt för 'sal'-fältet i det sammansatta indexet ovan.

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

Exempel 03: Textindex

Ibland kan du stöta på en situation där du bör hantera en stor datamängd, som stora beskrivningar av produkter, ingredienser, etc. Ett textindex kan vara användbart för att göra fulltextsökningar i ett stort textfält. Vi har till exempel skapat en ny samling som heter 'Test' i vår testdatabas. Infogade totalt 6 poster i den här samlingen med funktionen insertMany() enligt find()-frågan nedan.

test> db.Test.insertMany([

{namn: 'Ana' , av: 'Hon bor i London och är en bra lärare' },

{namn: 'Robert' , av: 'Han är en fantastisk fotbollsspelare' },

{namn: 'från' , av: 'Kan resa Dubai' },

{namn: 'Jacob' , av: 'Han är tankeväckande och rik.' },

{namn: 'Cillian' , av: 'En superstart av filmen blev bara berömmelse på några sekunder' },

{namn: 'Ken' , av: 'Matälskare. Hon kan äta dig också.' }

])

Nu kommer vi att skapa ett textindex i fältet 'Des' i denna samling, med hjälp av MongoDB:s createIndex()-funktion. Nyckelordet 'text' i fältvärdet visar typen av ett index, vilket är ett 'text'-index. Indexnamnet, des_text, har genererats automatiskt.

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

Nu har funktionen find() använts för att utföra 'text-sökning' på samlingen via 'des_text'-index. $search-operatören användes för att söka efter ordet 'mat' i samlingsposterna och visa just den posten.

test> db.Test.find({ $text: { $search: 'mat' }});

Verifiera index:

Du kan kontrollera och lista ner alla tillämpade index för olika samlingar i din MongoDB. För detta, använd metoden getIndex() tillsammans med namnet på en samling på din MongoDB-skalskärm. Vi har använt det här kommandot separat för samlingarna 'Test' och 'Dummy'. Detta visar all nödvändig information om de inbyggda och användardefinierade indexen på din skärm.

test> db.Test.getIndex()

test> db.Dummy.getIndex()

Drop Index:

Det är dags att ta bort indexen som tidigare skapats för samlingen med funktionen dropIndex() tillsammans med samma fältnamn som indexet hade tillämpats på. Frågan nedan visar att det enskilda indexet har tagits bort.

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

På samma sätt kan det sammansatta indexet tas bort.

test> db.Dummy.drop index({typ: 1 , kommer: 1 })

Slutsats

Genom att påskynda hämtningen av data från MongoDB är indexering avgörande för att förbättra effektiviteten i frågor. I brist på index måste MongoDB söka i hela samlingen efter matchande poster, vilket blir mindre effektivt när uppsättningens storlek ökar. MongoDB:s förmåga att snabbt upptäcka rätt poster med hjälp av indexdatabasstrukturen påskyndar behandlingen av frågor när lämplig indexering används.