Index je typický způsob, jak urychlit dotazy v běžném databázovém systému. Mezi MongoDB a databázovým systémem založeným na dokumentech není žádný rozdíl. Tento článek poskytuje přehled o indexu v MongoDB pro optimalizaci dotazů.
Index v Mongu:
Výchozí
_id je objekt ObjectId, 12bajtový typ BSON, který zaručuje jedinečnost v rámci kolekce. ObjectId je generováno na základě časového razítka, ID stroje, ID procesu a místního přírůstkového počítadla procesu.
Jedno pole
U operací indexu s jedním polem a řazení nezáleží na pořadí řazení (tj. vzestupně nebo sestupně) klíče indexu, protože MongoDB může index procházet v obou směrech. Hodnota indexu je typ indexu. Například 1 označuje vzestupné pořadí a -1 určuje sestupné pořadí.
db.friends.createIndex( { "name" : 1 } )
Složené pole
Pořadí polí uvedených ve složeném indexu má význam. Pokud se například složený index skládá z { userid:1, score:-1 }, index seřadí nejprve podle userid a poté, v rámci každé hodnoty userid, seřadí podle skóre.
db.products.createIndex( { "item": 1, "stock": 1 } )
Vícenásobný klíč
MongoDB používá více indexů k indexování obsahu v poli. MongoDB vytváří samostatné položky indexu pro každý prvek pole. Není třeba explicitně vytvářet více klíčů.
Textový index
Kolekce může mít maximálně jeden textový index.
Náklady na výkon pro textový index:
textové indexy mohou být velké. Obsahují jednu položku rejstříku pro každé jedinečné slovo se stopkami v každém indexovaném poli pro každý vložený dokument.
textové indexy ovlivní propustnost vkládání, protože MongoDB musí přidat položku rejstříku pro každé jedinečné slovo se stopkami v každém indexovaném poli každého nového zdrojového dokumentu.
db.reviews.createIndex( { comments: "text" } )
Hash index
Dotaz na obsah podle jeho hašované hodnoty. Hash je funkce, která se vypočítá podle její hodnoty. Hašovaná hodnota je navržena jako odlišná hodnota. Jedinou výhodou je, že je tak rychlý, že to vezme maximálně O(1), ale podle smlouvy bude normální binární vyhledávací strom trvat O(Log(N)). Hash bude teoreticky rychlejší než běžná implementace binárního vyhledávacího stromu. Ale nevýhodou je, že hash index provádějící hledání rozsahu bude extrémně pomalé než normální index.
Toto je příklad v pythonu pro vytvoření indexu hash
db.active.createIndex( { a: "hashed" } )