sql >> Databasteknik >  >> NoSQL >> MongoDB

Varför och när är det nödvändigt att bygga om index i MongoDB?

Enligt MongoDB-dokumentationen finns det i allmänhet inget behov av att rutinmässigt bygga om index.

OBS :Alla råd om lagring blir mer intressanta med MongoDB 3.0+, som introducerade en API för pluggbar lagringsmotor . Mina kommentarer nedan är specifikt med hänvisning till standard MMAP-lagringsmotorn i MongoDB 3.0 och tidigare. WiredTiger och andra lagringsmotorer har olika lagringsimplementationer för data och index.

Det kan finnas en viss fördel med att bygga om ett index med MMAP-lagringsmotorn om:

  • Ett index förbrukar en större mängd utrymme än förväntat jämfört med data. Obs! Du måste övervaka historiska data och indexstorlek för att få en baslinje för jämförelse.

  • Du vill migrera från ett äldre indexformat till ett nyare. Om en omindexering är tillrådlig kommer detta att nämnas i uppgraderingsanteckningarna. Till exempel introducerade MongoDB 2.0 betydande indexprestandaförbättringar a> så release notes inkluderar en föreslagen omindexering till v2.0-formatet efter uppgradering. På liknande sätt introducerade MongoDB 2.6 2dsphere (v2.0) index som har ett annat standardbeteende (gles som standard). Befintliga index byggs inte om efter indexversionsuppgraderingar; valet av om/när att uppgradera lämnas till databasadministratören.

  • Du har ändrat _id format för en samling till eller från en monotont ökande nyckel (t.ex. ObjectID) till ett slumpmässigt värde. Detta är lite esoteriskt, men det finns en indexoptimering som delar b-tree hinkar 90/10 (istället för 50/50) om du infogar _id s som alltid ökar (ref:SERVER-983 ). Om arten av ditt _id s ändras avsevärt kan det vara möjligt att bygga ett mer effektivt b-träd med ett omindex.

För mer information om allmänt B-träds beteende, se:Wikipedia:B-tree

Visualisera indexanvändning

Om du verkligen är nyfiken på att gräva lite mer i indexets interna delar, finns det några experimentella kommandon/verktyg du kan prova. Jag förväntar mig att dessa endast är begränsade till MongoDB 2.4 och 2.6:



  1. Läsning av DBname.system.indexes misslyckades på Atlas-klustret av mongobee efter att ha blivit ansluten

  2. MongoDB $avg Aggregation Pipeline Operator

  3. Återuppringning vid MongoDB Operation With Node.js

  4. Hur lagrar man i Redis sorterad uppsättning med tidsstämpel på serversidan som poäng?