MongoDB Indexelési útmutató – createIndex(), dropindex() Példa
Az indexek nagyon fontosak minden adatbázisban, és azzal együtt MongoDB ez sem más. Indexek használatával, lekérdezések végrehajtásával MongoDB hatékonyabbá válik.
Ha van egy gyűjteménye több ezer dokumentumot tartalmazó index nélkül, majd lekérdez, hogy megtaláljon bizonyos dokumentumokat, akkor ebben az 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 olyan speciális adatkészletek, amelyek a gyűjtemény adatainak egy részét tárolják. Mivel az adatok részlegesek, könnyebben olvashatók ezek az adatok. Ez a részhalmaz egy adott mező értékét vagy a mező értéke szerint rendezett mezőkészletet tárolja.
Az indexek hatásának megértése
Noha a bevezetőből láttuk, hogy az indexek jók a lekérdezésekhez, de a túl sok index lelassíthatja az egyéb 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 indexeket gyakran kell módosítani, ami csak többletköltséget jelent a gyűjtemény számára.
Az alábbi példa egy példát mutat be arra, hogy milyen mezőértékek képezhetnek indexet egy gyűjteményben. Egy index vagy a gyűjtemény egyetlen mezőjén alapulhat, vagy a gyűjtemény több mezőjén is alapulhat.
Az alábbi példában az EmployeeEid „1” és az EmployeeCode „AA” a gyűjteményben lévő dokumentumok indexelésére szolgál. Tehát amikor lekérdezés történik, ezek az indexek segítségével gyorsan és hatékonyan megtalálják a szükséges dokumentumokat a gyűjteményben.
Tehát még akkor is, ha a keresési lekérdezés az EmployeeCode „AA”-n alapul, a dokumentum visszakerül.
Hogyan készítsünk indexeket: createIndex()
Index létrehozása itt MongoDB a "CreateIndex”Módszer.
A következő példa bemutatja, hogyan lehet indexet adni a gyűjteményhez. Tételezzük fel, hogy ugyanazzal az Employee gyűjteményünkkel rendelkezünk, amelynek mezői neve „Employeeid” és „EmployeeName”.
db.Employee.createIndex({Employeeid:1})
Kód magyarázata:
- A CreateIndex módszerrel hozunk létre egy indexet a dokumentum „Alkalmazottai” alapján.
- Az „1” paraméter azt jelzi, hogy amikor az indexet az „Employeeid” mezőértékekkel hozzuk létre, azokat növekvő sorrendbe kell rendezni. Kérjük, vegye figyelembe, hogy ez különbözik az _id mezőtől (az azonosító mező a gyűjtemény minden egyes dokumentumának egyedi azonosítására szolgál), amelyet automatikusan létrehoz a gyűjteményben MongoDB. A dokumentumok most az Employeeeid szerint lesznek rendezve, nem az _id mező szerint.
Ha a parancs sikeresen végrehajtásra került, a következő kimenet jelenik meg:
output:
- A numIndexesBefore: 1 jelzi azon 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 az _id mezővel, amely szintén mezőértéknek számít az indexben. Mivel az _id indexmező kezdeti létrehozásakor a gyűjtemény része, a numIndexesBefore értéke 1.
- A numIndexesAfter: 2 azon mezőértékek számát jelzi, amelyek a parancs futtatása után szerepeltek az indexekben.
- Itt az „ok: 1” kimenet jelzi, 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 több mezőérték alapján is lehet indexet létrehozni.
A következő példa bemutatja, hogyan lehet ezt megtenni;
db.Employee.createIndex({Employeeid:1, EmployeeName:1])
Kód magyarázata:
- A createIndex metódus immár több mezőértéket is figyelembe vesz, amelyek hatására az index az „EmployeeEid” és az „EmployeeName” alapján jön létre. Az Employeeeid:1 és EmployeeName:1 azt jelzi, hogy az indexet ezen a 2 mezőértéken kell létrehozni, a :1 pedig azt jelzi, hogy növekvő sorrendben kell lennie.
Hogyan keressünk indexeket: getindexes()
Index keresése itt MongoDB segítségével történik „getIndexes” módszer.
A következő példa bemutatja, hogyan lehet ezt megtenni;
db.Employee.getIndexes()
Kód magyarázata:
- A getIndexes metódus a gyűjtemény összes indexének megkeresésére szolgál.
Ha a parancs sikeresen végrehajtásra került, a következő kimenet jelenik meg:
output:
- A kimenet egy dokumentumot ad vissza, amely csak azt mutatja, hogy 2 index van a gyűjteményben, amely az _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.
Hogyan lehet eldobni az indexeket: dropindex()
Index eltávolítása MongoDB 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ázata:
- A dropIndex metódus felveszi a szükséges mezőértékeket, amelyeket el kell távolítani az indexből.
Ha a parancs sikeresen végrehajtásra került, a következő kimenet jelenik meg:
output:
- Az nIndexesWas: 3 azon mezőértékek számát jelzi, amelyek a parancs futtatása előtt ott voltak az indexekben. Ne feledje, hogy minden gyűjtemény rendelkezik az _id mezővel, amely szintén mezőértéknek számít az indexben.
- 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 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ázata:
- A dropIndexes metódus eldobja az összes indexet, kivéve az _id indexet.
Ha a parancs sikeresen végrehajtásra került, a következő kimenet jelenik meg:
output:
- Az nIndexesWas: 2 azon mezőértékek számát jelzi, amelyek a parancs futtatása előtt ott voltak az indexekben.
- Ne feledje újra, hogy minden gyűjtemény rendelkezik az _id mezővel, amely egyben mezőértéknek számít az indexben, és ezt nem távolítja el MongoDB és ez az üzenet azt jelzi.
- Az ok: 1 kimenet azt jelzi, hogy a művelet sikeres volt.
Összegzésként
- Az indexek meghatározása fontos a gyűjteményben található dokumentumok gyorsabb és hatékonyabb kereséséhez.
- Indexek a createIndex metódussal hozhatók létre. Indexek létrehozhatók egyetlen mezőre vagy több mezőértékre.
- Az indexeket a getIndexes metódussal találhatja meg.
- Az indexek eltávolíthatók a dropIndex használatával az egyes indexekhez, vagy a dropIndexek használatával az összes index eldobásához.