MongoDB Indexelés: createIndex() és dropIndex()

⚡ Okos összefoglaló

MongoDB Az indexek egy gyűjtemény mezőinek rendezett részhalmazát tárolják, így a lekérdezések minden rekord beolvasása nélkül megtalálhatják a dokumentumokat. A createIndex, getIndexes és dropIndex metódusok felépítik, listázzák és eltávolítják ezeket a teljesítménykritikus struktúrákat.

  • 🚀 Cél: Indexek engedik MongoDB A gyorsabb olvasás érdekében hagyja ki a teljes gyűjtemény beolvasását.
  • 🇧🇷 createIndex: Egymezős vagy összetett indexeket hoz létre növekvő vagy csökkenő sorrendben.
  • 🔍 getIndexes: Felsorolja egy gyűjtemény összes indexét, beleértve az alapértelmezett _id-t is.
  • 🗑️ dropIndex: Eltávolít egy indexet; a dropIndexs az összeset törli, kivéve az _id-t.
  • 🇧🇷 Kompromisszum: A túl sok index lelassítja a beszúrásokat, frissítéseket és törléseket.
  • 🤖 AI hangolás: Az asszisztensek automatikusan ajánlják és generálják a megfelelő indexeket.

MongoDB Indexelés createIndex dropIndex

Mik MongoDB Indexek?

Az indexek nagyon fontosak minden adatbázisban, és azzal együtt MongoDB ez nem másképp van. Indexek használatával a lekérdezések végrehajtása MongoDB hatékonyabbá válik.

Ha lenne egy több ezer dokumentumból álló gyűjteményed indexek nélkül, és lekérdezéssel keresel meg bizonyos dokumentumokat, akkor ilyen esetben MongoDB át kell szkennelni a teljes gyűjteményt a dokumentumok megtalálásához. De ha lennének indexei, MongoDB ezekkel az indexekkel korlátozza a gyűjteményben keresendő dokumentumok számát.

Az indexek speciális adathalmazok, amelyek a gyűjtemény adatainak részleges részét tárolják. Mivel az adatok részlegesek, könnyebben olvashatók. Ez a részleges halmaz egy adott mező vagy mezők egy halmazának értékét tárolja, a mező értéke szerint rendezve.

Az indexek hatásának megértése

Habár a bevezetésből kiderült, hogy az indexek jók lekérdezésekhez, a túl sok index lelassíthatja más műveleteket, például a Beszúrás, Törlés és Frissítés műveleteket.

Ha gyakran hajtanak végre beszúrási, törlési és frissítési műveleteket a dokumentumokon, akkor az indexeknek is ilyen gyakran kellene változniuk, ami csak többletterhelést jelentene a gyűjtemény számára.

Az alábbi példa bemutatja, hogy mely mezőértékek alkothatnak indexet egy gyűjteményben. Egy index alapulhat a gyűjtemény egyetlen mezőjén, vagy több mezőjén is.

Az alábbi példában az Alkalmazotti azonosító „1” és az AlkalmazottCode Az „AA” indexeket a gyűjteményben található dokumentumok indexelésére használják. Tehát amikor lekérdezést keresnek, ezeket az indexeket használják a szükséges dokumentumok gyors és hatékony megtalálására a gyűjteményben.

Tehát még ha a keresési lekérdezés az Alkalmazotton alapul isCode „AA”, akkor a dokumentum visszakerülne.

Az indexek hatásának megértése

Hogyan készítsünk indexeket: createIndex()

Index létrehozása a következőben: MongoDB segítségével történik CreateIndex módszer.

A következő példa bemutatja, hogyan adhatunk hozzá indexet egy gyűjteményhez. Tegyük fel, hogy van egy ugyanilyen Alkalmazott gyűjteményünk, amelynek mezőnevei „Alkalmazottazonosító” és „Alkalmazottnév”.

Indexek létrehozása a createIndex segítségével

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

Code Magyarázat:

  1. Az CreateIndex módszerrel hozunk létre egy indexet a dokumentum „Alkalmazottai” alapján.
  2. Az „1” paraméter azt jelzi, hogy amikor az indexet az „Employeeid” mező értékeivel hozzuk létre, azokat növekvő sorrendbe kell rendezni. Kérjük, vegye figyelembe, hogy ez eltér az _id mezőtől (amely egyedileg azonosítja az egyes dokumentumokat), amely MongoDB automatikusan létrehozza. A dokumentumok mostantól az Alkalmazotti azonosító, és nem az _id mező szerint lesznek rendezve.

Ha a parancs végrehajtása sikeres, a következő kimenet jelenik meg:

output:

createIndex kimenet

  1. A numIndexesBefore: 1 a parancs futtatása előtti indexekben lévő mezőértékek számát jelzi. Minden gyűjtemény tartalmazza az _id mezőt, amely szintén mezőértéknek számít, tehát a numIndexesBefore értéke 1.
  2. A numIndexesAfter: 2 a parancs futtatása utáni indexekben lévő mezőértékek számát jelzi.
  3. Az „ok: 1” kimenet azt jelzi, hogy a művelet sikeres volt, és az új index hozzáadódott a gyűjteményhez.

A fenti kód bemutatja, hogyan hozhatunk létre indexet egy mezőérték alapján, de több mezőérték alapján is létrehozhatunk indexet. A következő példa bemutatja, hogyan lehet ezt megtenni:

Összetett index létrehozása több mezőn

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

A createIndex metódus mostantól több mezőértéket is figyelembe vesz, aminek következtében az index az „Employeeid” és az „EmployeeName” alapján jön létre. Az Employeeid:1 és az EmployeeName:1 azt jelzi, hogy az indexet ezen a két mezőértéken kell létrehozni, ahol az :1 a növekvő sorrendet jelöli. Ezt összetett indexnek nevezzük.

Indexek keresése: getIndexes()

Index keresése MongoDB segítségével történik getIndexes metódus. A következő példa bemutatja, hogyan lehet ezt megtenni:

Indexek keresése a getIndexes segítségével

db.Employee.getIndexes()

A getIndexes metódus a gyűjtemény összes indexének megkeresésére szolgál.

Ha a parancs végrehajtása sikeres, a következő kimenet jelenik meg:

output:

getIndexes kimenet

A kimenet egy dokumentumot ad vissza, amely azt mutatja, hogy a gyűjteményben két index található: az _id mező és az Employeeid mező. Az :1 azt jelzi, hogy az indexben lévő mezőértékek növekvő sorrendben jönnek létre.

Indexek törlése: dropIndex()

Index eltávolítása a következőből: MongoDB segítségével történik dropIndex metódus. A következő példa bemutatja, hogyan lehet ezt megtenni:

Indexek eldobása dropIndex segítségével

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

A dropIndex metódus a kötelező mezőértékeket veszi át, amelyeket el kell távolítani az indexből.

Ha a parancs végrehajtása sikeres, a következő kimenet jelenik meg:

output:

dropIndex kimenet

  1. Az nIndexesWas: 3 a parancs futtatása előtti indexekben lévő mezőértékek számát jelzi. Minden gyűjtemény rendelkezik az _id mezővel, amely szintén mezőértéknek számít.
  2. Az ok: 1 kimenet azt jelzi, hogy a művelet sikeres volt, és az „Employeeeid” mező eltávolításra kerül az indexből.

A gyűjtemény összes indexének egyidejű eltávolításához használhatjuk a dropIndexes parancsot. A következő példa bemutatja, hogyan lehet ezt megtenni:

Az összes index elvetése a dropIndexes paranccsal

db.Employee.dropIndexes()

A dropIndexes metódus eldobja az összes indexet, kivéve az _id indexet.

Ha a parancs végrehajtása sikeres, a következő kimenet jelenik meg:

output:

dropIndexes kimenet

  1. Az nIndexesWas: 2 a parancs futtatása előtti indexekben lévő mezőértékek számát jelzi.
  2. Minden gyűjtemény rendelkezik az _id mezővel, amely szintén mezőértéknek számít, és nem kerül eltávolításra a következővel: MongoDB; erre utal ez az üzenet.
  3. Az ok: 1 kimenet azt jelzi, hogy a művelet sikeres volt.

GYIK

Egyetlen mezőből álló index egyetlen mezőt rendez, és olyan lekérdezésekhez illik, amelyek csak az adott mező alapján szűrnek. Egy összetett index több mezőt fed le egyetlen struktúrában, és olyan lekérdezésekhez illik, amelyek ezeket a mezőket együttesen szűrik vagy rendezik. Az összetett indexek legfeljebb 32 mezőt támogatnak.

Az _id mező a következő: MongoDBelsődleges kulcsa, így minden gyűjtemény automatikusan egyedi _id indexet kap. Ez nem dobható el. Ezért kezdődik a numIndexesBefore 1-gyel, még az egyéni index hozzáadása előtt is.

Futtassa a lekérdezést az .explain(“executionStats”) függvénnyel. A nyertes tervben az IXSCAN szakasz azt jelenti, hogy indexet használtak, míg a COLLSCAN szakasz azt jelenti, hogy MongoDB minden dokumentumot átvizsgáltak, és egy új index segíthet.

Az $indexStats összesítési fázissal megtekintheti, hogy az egyes indexekhez milyen gyakran férnek hozzá. A nagyon alacsony kihasználtságú indexek lemezterületet pazarolnak és lassú írási sebességgel rendelkeznek, ezért távolítsa el őket a dropIndex paranccsal a gyűjtemény szűkösebbé tétele érdekében.

A mesterséges intelligencia eszközei elemzik a lassú lekérdezési naplókat, és javaslatot tesznek arra, hogy mely mezőket indexeljék. MongoDBA Performance Advisor az indexjavaslatokat hatásuk szerint rangsorolja, segítveping Nagy értékű indexeket adsz hozzá, és a redundánsokat kihagyod.

Igen. Az AI Copilot asszisztensei a sima angol kéréseket helyes createIndex szintaxissá alakítják, beleértve a növekvő vagy csökkenő kulcsokat és az összetett mezők sorrendjét, majd elmagyarázzák a kapott indexet.

Az ESR az Egyenlőség (Equality), Rendezés (Rendez), Tartomány (Rendel). Összetett index létrehozásakor először az egyenlőség-egyezés mezőket kell elhelyezni, majd a rendezési mezőket, végül pedig a tartományszűrőket. Ez a sorrend lehetővé teszi, hogy... MongoDB a lehető leghatékonyabban használja az indexet.

Egy lefedett lekérdezésre teljes egészében egy indexből válaszolunk, a dokumentumok olvasása nélkül. Amikor a szűrőben és a vetítésben lévő összes mező egyetlen indexben található, MongoDB gyorsabban adja vissza az eredményeket.

Foglald össze ezt a bejegyzést a következőképpen: