Az indexek minden adatbázisban nagyon fontosak, és a MongoDB-vel ez sem különb. Az Indexek használatával a lekérdezések MongoDB-ben történő végrehajtása hatékonyabbá válik.
Ha több ezer dokumentumot tartalmazó gyűjteménye van, indexek nélkül, és akkor bizonyos dokumentumok megkeresésére kérdez, akkor a MongoDB-nek a teljes gyűjteményt be kell szkennelnie a dokumentumok megtalálásához. De ha rendelkeznének indexekkel, a MongoDB ezeket az indexeket használva korlátozná a gyűjteményben keresendő dokumentumok számát.
Az indexek speciális adatkészletek, amelyek a gyűjtemény adatainak egy részét tárolják. Mivel az adatok részlegesek, könnyebbé válik az adatok olvasása. Ez a részhalmaz tárolja egy adott mező vagy mezőcsoport értékét a mező értéke szerint rendezve.
Ebben az oktatóanyagban megtudhatja -
- Az indexek hatásának megértése
- Indexek létrehozása: createIndex ()
- Indexek keresése: getindexes ()
- Az indexek eldobása: dropindex ()
Az indexek hatásának megértése
Bár a bevezetés óta láttuk, hogy az indexek alkalmasak a lekérdezésekre, de a túl sok index lassíthatja más műveleteket, például a Beszúrás, Törlés és Frissítés műveletet.
Ha a dokumentumokon gyakran végeznek beillesztési, törlési és frissítési műveleteket, akkor az indexeknek ezt gyakran módosítaniuk kell, ami csak általános költséget jelentene a gyűjtemény számára.
Az alábbi példa arra mutat példát, hogy mely mezőértékek képezhetnek indexet a gyűjteményben. Az index vagy a gyűjtemény csak egy mezőjére épülhet, vagy a gyűjtemény több mezőjére is épülhet.
Az alábbi példában az Employeeid "1" és az EmployeeCode "AA" a gyűjtemény dokumentumainak indexelésére szolgál. Tehát amikor lekérdezésre kerül sor, ezeket az indexeket felhasználva gyorsan és hatékonyan megtalálhatja a szükséges dokumentumokat a gyűjteményben.
Tehát még akkor is, ha a keresési lekérdezés az "AA" EmployeeCode-ra épül, a dokumentum visszaküldésre kerül.
Indexek létrehozása: createIndex ()
Index létrehozása a MongoDB-ben a " createIndex " módszerrel történik.
A következő példa bemutatja, hogyan lehet indexet hozzáadni a gyűjteményhez. Tegyük fel, hogy ugyanazon Employee gyűjteményünk van, amelynek a mezőnevei "Employeeid" és "EmployeeName".
db.Employee.createIndex({Employeeid:1})
Kód Magyarázat:
- A createIndex metódus segítségével indexet lehet létrehozni a dokumentum "Employeeid" alapján.
- Az '1' paraméter azt jelzi, hogy amikor az indexet az "Employeeid" mezőértékekkel hozzák létre, azokat növekvő sorrendben kell rendezni. Felhívjuk figyelmét, hogy ez különbözik a _id mezőtől (az azonosító mező a gyűjtemény minden dokumentumának egyedi azonosítására szolgál), amelyet a MongoDB automatikusan létrehoz a gyűjteményben. A dokumentumok mostantól az Employeeid és a _id mező szerint lesznek rendezve.
A parancs sikeres végrehajtása esetén a következő kimenet jelenik meg:
Kimenet:
- A numIndexesBefore: 1 jelzi a mezőértékek számát (a gyűjtemény tényleges mezői), amelyek a parancs futtatása előtt ott voltak az indexekben. Ne feledje, hogy minden gyűjtemény rendelkezik a _id mezővel, amely szintén mezőértékként számít az indexhez. Mivel a _id index mező az eredeti létrehozásakor a gyűjtemény része, a numIndexesBefore értéke 1.
- A numIndexesAfter: 2 azt a mezőértéket jelöli, amely a parancs futtatása után ott volt az indexekben.
- Itt az "ok: 1" kimenet meghatározza, hogy a művelet sikeres volt, és az új index hozzáadódik a gyűjteményhez.
A fenti kód bemutatja, hogyan lehet indexet létrehozni egy mezőérték alapján, de létrehozhatunk indexet is több mezőérték alapján.
A következő példa bemutatja, hogyan lehet ezt megtenni;
db.Employee.createIndex({Employeeid:1, EmployeeName:1])
Kód Magyarázat:
- A createIndex metódus most több mezőértéket is figyelembe vesz, amelyek az index létrehozását az "Employeeid" és az "EmployeeName" alapján hozzák létre. Az Employeeid: 1 és az EmployeeName: 1 azt jelzi, hogy az indexet ezen a 2 mezőértéken kell létrehozni, a következővel: 1 jelzi, hogy növekvő sorrendben kell lennie.
Indexek keresése: getindexes ()
Index keresése a MongoDB-ben a "getIndexes" módszerrel történik.
A következő példa bemutatja, hogyan lehet ezt megtenni;
db.Employee.getIndexes()
Kód Magyarázat:
- A getIndexes metódust használják a gyűjtemény összes indexének megtalálásához.
A parancs sikeres végrehajtása esetén a következő kimenet jelenik meg:
Kimenet:
- A kimenet egy olyan dokumentumot ad vissza, amely csak azt mutatja, hogy van 2 index a gyűjteményben, amely a _id mező, a másik pedig az Employee id mező. A: 1 azt jelzi, hogy az index mezőértékei növekvő sorrendben jönnek létre.
Az indexek eldobása: dropindex ()
Az index eltávolítása a MongoDB-ben a dropIndex módszerrel történik.
A következő példa bemutatja, hogyan lehet ezt megtenni;
db.Employee.dropIndex(Employeeid:1)
Kód Magyarázat:
- A dropIndex metódus felveszi a szükséges mezőértékeket, amelyeket el kell távolítani az indexből.
A parancs sikeres végrehajtása esetén a következő kimenet jelenik meg:
Kimenet:
- Az nIndexesWas: 3 azt a mezőértéket jelöli, amely a parancs futtatása előtt ott volt az indexekben. Ne feledje, hogy minden gyűjtemény rendelkezik a _id mezővel, amely szintén mezőértékként számít az indexhez.
- Az ok: 1 kimenet megadja, hogy a művelet sikeres volt, és az "Employeeid" mező törlődik az indexből.
A gyűjtemény összes indexének egyszerre történő eltávolításához használhatja a dropIndexes parancsot.
A következő példa bemutatja, hogyan lehet ezt megtenni.
db.Employee.dropIndex()
Kód Magyarázat:
- A dropIndexes módszer az összes indexet eldobja, kivéve a _id indexet.
A parancs sikeres végrehajtása esetén a következő kimenet jelenik meg:
Kimenet:
- Az nIndexesWas: 2 azt a mezőértéket jelöli, amely a parancs futtatása előtt ott volt az indexekben.
- Ne feledje újra, hogy minden gyűjtemény rendelkezik a _id mezővel, amely szintén mezőértékként számít az indexhez, és ezt a MongoDB nem távolítja el, és ezt jelzi ez az üzenet.
- Az ok: 1 kimenet megadja, hogy a művelet sikeres volt.
Összegzés
- Az indexek meghatározása fontos a gyűjtemény dokumentumai gyorsabb és hatékonyabb kereséséhez.
- Az indexeket a createIndex módszerrel lehet létrehozni. Indexeket csak egy mezőre vagy több mezőértékre lehet létrehozni.
- Az indexeket a getIndexes módszerrel lehet megtalálni.
- Az indexek eltávolíthatók az egyes indexek dropIndex vagy az összes indexek dropIndexes használatával.