Indexy jsou v každé databázi velmi důležité a v MongoDB tomu není jinak. Díky použití indexů je provádění dotazů v MongoDB efektivnější.
Pokud byste měli kolekci s tisíci dokumenty bez indexů a pak byste se dotazovali na vyhledání určitých dokumentů, pak by v takovém případě musela MongoDB prohledat celou kolekci, aby dokumenty našla. Pokud byste však měli indexy, MongoDB by tyto indexy použila k omezení počtu dokumentů, které je třeba v kolekci prohledat.
Indexy jsou speciální datové sady, které uchovávají částečnou část dat kolekce. Protože se jedná o částečná data, je snazší tato data číst. Tato částečná množina uchovává hodnotu určitého pole nebo množinu polí seřazených podle hodnoty pole.
V tomto kurzu se naučíte –
- Pochopení vlivu indexů
- Jak vytvořit indexy: createIndex()
- Jak najít indexy: getindexes()
- Jak zrušit indexy:
Pochopení vlivu indexů
Nyní jsme sice z úvodu viděli, že indexy jsou pro dotazy dobré, ale příliš mnoho indexů může zpomalit další operace, jako jsou operace Insert, Delete a Update.
Pokud by se často prováděly operace vkládání, mazání a aktualizace dokumentů, pak by se indexy musely tak často měnit, což by byla jen režie pro kolekci.
Následující příklad ukazuje ukázku toho, jaké hodnoty polí by mohly tvořit index v kolekci. Index může být založen buď jen na jednom poli v kolekci, nebo může být založen na více polích v kolekci.
V níže uvedeném příkladu jsou pro indexování dokumentů v kolekci použita pole Employeeid „1“ a EmployeeCode „AA“. Při vyhledávání dotazu se tedy tyto indexy použijí k rychlému a efektivnímu nalezení požadovaných dokumentů v kolekci.
Takže i když je vyhledávací dotaz založen na EmployeeCode „AA“, bude tento dokument vrácen.
Jak vytvořit indexy: createIndex()
Vytvoření indexu v MongoDB se provádí pomocí metody „createIndex“.
Následující příklad ukazuje, jak přidat index do kolekce. Předpokládejme, že máme stejnou kolekci Employee, která má názvy polí „Employeeid“ a „EmployeeName“.
db.Employee.createIndex({Employeeid:1})
Vysvětlení kódu:
- Metoda createIndex slouží k vytvoření indexu na základě „Employeeid“ dokumentu.
- Parametr „1“ označuje, že při vytváření indexu s hodnotami pole „Employeeid“ by měly být seřazeny vzestupně. Vezměte prosím na vědomí, že se to liší od pole _id (Pole id slouží k jednoznačné identifikaci každého dokumentu v kolekci), které MongoDB vytváří v kolekci automaticky. Dokumenty budou nyní seřazeny podle pole Employeeid, a nikoli podle pole _id.
Pokud je příkaz úspěšně proveden, zobrazí se následující výstup:
Výstup:
- Příkaz numIndexesBefore: 1 udává počet hodnot polí (Aktuální pole v kolekci), které byly v indexech před provedením příkazu. Nezapomeňte, že každá kolekce má pole _id, které se také počítá jako hodnota pole do indexu. Protože pole _id indexu je součástí kolekce při jejím počátečním vytvoření, hodnota numIndexesBefore je 1.
- Podle numIndexesAfter: 2 udává počet hodnot pole, které se nacházely v indexech po spuštění příkazu.
- Zde je uvedeno „ok:
Výše uvedený kód ukazuje, jak vytvořit index na základě jedné hodnoty pole, ale lze také vytvořit index na základě více hodnot polí.
Následující příklad ukazuje, jak to lze provést;
db.Employee.createIndex({Employeeid:1, EmployeeName:1])
Vysvětlení kódu:
- Metoda createIndex nyní bere v úvahu více hodnot polí, což nyní způsobí vytvoření indexu na základě „Employeeid“ a „EmployeeName“. Hodnoty Employeeid:1 a EmployeeName:1 naznačují, že index by měl být vytvořen na základě těchto 2 hodnot polí, přičemž :1 znamená, že by měl být ve vzestupném pořadí.
Jak najít indexy: getindexes()
Nalezení indexu v MongoDB se provádí pomocí metody „getIndexes“.
Následující příklad ukazuje, jak to lze provést;
db.Employee.getIndexes()
Vysvětlení kódu:
- Metoda getIndexes slouží k nalezení všech indexů v kolekci.
Pokud je příkaz úspěšně proveden, zobrazí se následující výstup:
Výstup:
- Výstup vrátí dokument, který právě ukazuje, že v kolekci jsou 2 indexy, z nichž jeden je pole _id a druhý pole ID zaměstnance. Označení :1 znamená, že hodnoty polí v indexu jsou vytvořeny ve vzestupném pořadí.
Jak zrušit indexy: dropindex()
Odstranění indexu v MongoDB se provádí pomocí metody dropIndex.
Následující příklad ukazuje, jak to lze provést;
db.Employee.dropIndex(Employeeid:1)
Vysvětlení kódu:
- Metoda dropIndex přebírá požadované hodnoty polí, které je třeba z indexu odstranit.
Pokud je příkaz úspěšně proveden, zobrazí se následující Výstup:
Výstup:
- Příkaz nIndexesWas: 3 udává počet hodnot polí, které byly v indexech před provedením příkazu. Nezapomeňte, že každá kolekce má pole _id, které se také počítá jako hodnota pole do indexu.
- Příkaz ok:
Chceme-li odstranit všechny indexy v kolekci najednou, můžeme použít příkaz dropIndexes.
Následující příklad ukazuje, jak to lze provést.
db.Employee.dropIndex()
Vysvětlení kódu:
- Metoda dropIndexes zruší všechny indexy kromě indexu _id.
Pokud je příkaz úspěšně proveden, zobrazí se následující výstup:
Výstup:
- Příkaz nIndexesWas: 2 udává počet hodnot polí, které byly v indexech před provedením příkazu.
- Znovu si uvědomte, že každá kolekce má pole _id, které se také počítá jako hodnota Field do indexu, a to nebude MongoDB odstraněno, a to je to, co tato zpráva indikuje.
- The ok:
Souhrn
- Definování indexů je důležité pro rychlejší a efektivnější vyhledávání dokumentů v kolekci.
- Indexy lze vytvořit pomocí metody createIndex. Indexy lze vytvořit pouze na jedno pole nebo na více hodnot polí.
- Indexy lze vyhledat pomocí metody getIndexes.
- Indexy lze odstranit pomocí dropIndex pro jednotlivé indexy nebo dropIndexes pro odstranění všech indexů.