Indeks er en typisk måde at fremskynde forespørgsler i normale databasesystemer. Der er ingen forskel mellem MongoDB og et dokumentbaseret databasesystem. Denne artikel giver indsigt i indekset i MongoDB til forespørgselsoptimering.
Indeks i Mongo:
Standard
_id er et ObjectId-objekt, 12-byte BSON-type, der garanterer unikhed i samlingen. Objekt-id'et genereres baseret på tidsstempel, maskin-id, proces-id og en proceslokal inkrementel tæller.
Enkelt felt
For et enkeltfelts indeks og sorteringsoperationer er sorteringsrækkefølgen (dvs. stigende eller faldende) af indeksnøglen ligegyldig, fordi MongoDB kan krydse indekset i begge retninger. Værdien af indeks er typen af indeks. For eksempel angiver 1 stigende rækkefølge, og -1 angiver den faldende rækkefølge.
db.friends.createIndex( { "name" : 1 } )
Sammensat felt
Rækkefølgen af felter opført i et sammensat indeks har betydning. For eksempel, hvis et sammensat indeks består af { brugerid:1, score:-1 }, sorteres indekset først efter bruger-id og derefter, inden for hver bruger-id-værdi, sorteres efter score.
db.products.createIndex( { "item": 1, "stock": 1 } )
Flere nøgler
MongoDB bruger flere indeks til at indeksere indholdet i et array. MongoDB opretter separate indeksposter for hvert element i arrayet. Du behøver ikke udtrykkeligt at oprette flere nøgler.
Tekstindeks
En samling kan højst have ét tekstindeks.
Ydelsesomkostninger for tekstindeks:
tekstindekser kan være store. De indeholder én indeksindgang for hvert unikt efterstammet ord i hvert indekseret felt for hvert indsat dokument.
tekstindekser vil påvirke indsættelsesgennemstrømningen, fordi MongoDB skal tilføje en indeksindgang for hvert unikt efterstammet ord i hvert indekseret felt i hvert nyt kildedokument.
db.reviews.createIndex( { comments: "text" } )
Hash-indeks
Forespørg indhold efter dets hash-værdi. Hash er en funktion, der skal beregnes efter dens værdi. Den hash-værdi er designet til at være distinkt værdi. Den ene fordel er, at det er så hurtigt, som højst tager O(1), men ved kontrakt vil det normale binære søgetræ tage O(Log(N)). Hash vil være teoretisk hurtigere end normal implementering af binært søgetræ. Men ulempen er, at hashindeks, der udfører områdesøgning, vil være ekstremt langsomt end normalt indeks.
Dette er et eksempel i python til at bygge et hash-indeks
db.active.createIndex( { a: "hashed" } )