Az indexek nagyon fontosak minden adatbázisban, és ez a MongoDB esetében sincs másképp. Az indexek használatával a lekérdezések végrehajtása a MongoDB-ben hatékonyabbá válik.
Ha lenne egy több ezer dokumentumot tartalmazó gyűjteményünk indexek nélkül, majd lekérdezéssel keresnénk bizonyos dokumentumokat, akkor ilyen esetben a MongoDB-nek az egész gyűjteményt át kellene vizsgálnia, hogy megtalálja a dokumentumokat. De ha lennének indexeid, akkor a MongoDB ezeket az indexeket használná arra, hogy korlátozza a gyűjteményben keresendő dokumentumok számát.
Az indexek olyan speciális adathalmazok, amelyek a gyűjtemény adatainak egy részleges részét tárolják. Mivel az adatok részlegesek, könnyebbé válik az adatok olvasása. Ez a részhalmaz egy adott mező vagy mezők egy halmazának értékét tárolja a mező értéke szerint rendezve.
Ebben a tananyagban megtanulja –
- Az indexek hatásának megértése
- Hogyan hozzon létre indexeket: createIndex()
- Hogyan keressen indexeket: getindexes()
- Hogyan törölje az indexeket: Dropindex()
Az indexek hatásának megértése
Most, bár a bevezetőben láttuk, hogy az indexek jót tesznek a lekérdezéseknek, de a túl sok index lassíthatja az egyéb műveleteket, például az Insert, Delete és Update műveletet.
Ha a dokumentumokon gyakran végeznek beillesztési, törlési és frissítési műveleteket, akkor az indexeknek is ilyen gyakran kellene változniuk, ami csak overhead lenne a gyűjtemény számára.
Az alábbi példa egy példát mutat arra, hogy milyen mezőértékek alkothatnak indexet egy gyűjteményben. Egy index alapulhat a gyűjtemény egyetlen mezőjén, vagy alapulhat a gyűjtemény több mezőjén is.
A lenti példában az Employeeid “1” és az EmployeeCode “AA” mezőt használjuk a gyűjteményben lévő dokumentumok indexelésére. Így a lekérdezéses keresés során ezek az indexek segítségével gyorsan és hatékonyan meg lehet találni a gyűjteményben a kívánt dokumentumokat.
Így még akkor is, ha a keresési lekérdezés az EmployeeCode “AA” alapján történik, ez a dokumentum fog visszakerülni.
Indexek létrehozása: createIndex()
Az index létrehozása a MongoDB-ben a “createIndex” metódus segítségével történik.
A következő példa azt mutatja, hogyan adjunk indexet a gyűjteményhez. Tegyük fel, hogy megvan ugyanaz az Employee gyűjteményünk, amelynek a Field nevei “Employeeid” és “EmployeeName”.
db.Employee.createIndex({Employeeid:1})
Kódmagyarázat:
- A createIndex metódus egy index létrehozására szolgál a dokumentum “Employeeid” mezője alapján.
- A ‘1’ paraméter azt jelzi, hogy az index létrehozásakor az “Employeeid” mező értékeit növekvő sorrendbe kell rendezni. Kérjük, vegye figyelembe, hogy ez eltér a _id mezőtől (Az id mezőt a gyűjteményben lévő egyes dokumentumok egyedi azonosítására használják), amelyet a MongoDB automatikusan hoz létre a gyűjteményben. A dokumentumok mostantól az Employeeid és nem az _id mező szerint lesznek rendezve.
A parancs sikeres végrehajtása esetén a következő kimenet jelenik meg:
Kimenet:
- A numIndexesBefore: 1 a mezőértékek számát jelzi (A gyűjteményben lévő tényleges mezők), amelyek a parancs futtatása előtt az indexekben voltak. Ne feledje, hogy minden gyűjteménynek van _id mezője, amely szintén Field értéknek számít az indexhez. Mivel az _id indexmező a gyűjtemény kezdeti létrehozásakor a gyűjtemény része, a numIndexesBefore értéke 1.
- A numIndexesAfter: 2 jelzi azoknak a mezőértékeknek a számát, amelyek a parancs futtatása után ott voltak az indexekben.
- Itt az “ok: 1” kimenet azt adja meg, hogy a művelet sikeres volt, és az új index hozzáadódik a gyűjteményhez.
A fenti kód azt mutatja, 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 mutatja, hogyan lehet ezt megtenni;
db.Employee.createIndex({Employeeid:1, EmployeeName:1])
Kódmagyarázat:
- A createIndex módszer mostantól figyelembe veszi a több mező értékét, ami mostantól az “Employeeid” és az “EmployeeName” alapján hozza létre az indexet. Az Employeeid:1 és EmployeeName:1 azt jelzi, hogy az indexet e két mezőérték alapján kell létrehozni, a :1 pedig azt, hogy növekvő sorrendben kell létrehozni.
Indexek keresése: getindexes()
Az index keresése a MongoDB-ben a “getIndexes” metódus segítségével történik.
Az alábbi példa mutatja, hogyan lehet ezt elvégezni;
db.Employee.getIndexes()
Kódmagyarázat:
- A getIndexes metódus egy gyűjtemény összes indexének megkeresésére szolgál.
A parancs sikeres végrehajtása esetén a következő kimenet jelenik meg:
Kimenet:
- A kimenet egy dokumentumot ad vissza, amely csak azt mutatja, hogy a gyűjteményben 2 index van, az egyik a _id mező, a másik pedig a Employee id mező. A :1 azt jelzi, hogy az indexben lévő mezőértékek növekvő sorrendben jönnek létre.
Indexek eltávolítása: dropindex()
A MongoDB-ben egy index eltávolítása a dropIndex metódus segítségével történik.
A következő példa mutatja, hogyan lehet ezt megtenni;
db.Employee.dropIndex(Employeeid:1)
Kódmagyarázat:
- A dropIndex metódus átveszi a szükséges Field é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 az indexekben a parancs futtatása előtt az indexekben lévő mezőértékek számát jelzi. Ne feledje, hogy minden gyűjteménynek van _id mezője, amely szintén Field értéknek számít az indexhez.
- Az ok: 1 kimenet azt adja meg, hogy a művelet sikeres volt, és az “Employeeid” mezőt eltávolítottuk az indexből.
A gyűjtemény összes indexének egyszerre történő eltávolításához használhatjuk a dropIndexes parancsot.
A következő példa mutatja, hogyan lehet ezt megtenni.
db.Employee.dropIndex()
Kódmagyarázat:
- A dropIndexes módszer a _id index kivételével minden indexet töröl.
A parancs sikeres végrehajtása esetén a következő kimenet jelenik meg:
Kimenet:
- Az nIndexesWas: 2 azt jelzi, hogy hány mezőérték volt az indexekben a parancs futtatása előtt.
- Még egyszer ne feledjük, hogy minden gyűjteménynek van _id mezője, ami szintén Field értéknek számít az indexhez, és ezt a MongoDB nem fogja eltávolítani, és ezt jelzi ez az üzenet.
- Az ok: 1 kimenet azt adja meg, hogy a művelet sikeres volt.
Summary
- Az indexek meghatározása fontos a gyűjteményben lévő dokumentumok gyorsabb és hatékonyabb kereséséhez.
- Az indexeket a createIndex metódussal hozhatjuk létre. Az indexek létrehozhatók egyetlen mezőre vagy több mező értékére is.
- Az indexeket a getIndexes metódus segítségével lehet megtalálni.
- Az indexek eltávolíthatók a dropIndex használatával az egyes indexek esetében vagy a dropIndexes metódussal az összes index eltávolításához.