sql >> Database teknologi >  >> NoSQL >> MongoDB

mongodb indeksstrategi for områdeforespørgsel med forskellige felter

Føj også lidt mere til baloo 's svar.

Om tidsstemplet vs. lang udgave. Generelt vil MongoDB-serveren ikke se en forskel. BSON-kodningslængden er den samme (64 bit). Du kan muligvis se en ydelse anderledes på klientsiden afhængigt af driverens kodning. Som et eksempel, på Java-siden a ved hjælp af 10gen-driveren gengives et tidsstempel som Date det er meget tungere end Long . Der er drivere der forsøger at undgå den overhead.

Det andet problem er, at du vil se en præstationsforbedring, hvis du lukker intervallet for det første felt i indekset. Så hvis du bruger indekset foreslået af baloo :

db.collection.ensureIndex({start: 1, final: 1})

Din forespørgsel vil fungere (potentielt meget) bedre, hvis du forespørger er:

db.collection.find({start:{$gt:DateTime(...),$lt:DateTime(...)}, 
                    final:{$lt:DateTime(...)}})

Konceptuelt, hvis du tænker på indeksene som et træ, begrænser det lukkede område begge sider af træet i stedet for kun den ene side. Uden det lukkede område skal serveren "tjekke" alle indgange med en start større end det angivne tidsstempel, da det ikke kender sammenhængen mellem start og final .

Du kan endda opdage, at forespørgselsydeevnen ikke er bedre ved at bruge et enkelt feltindeks som:

db.collection.ensureIndex({start: 1})

Størstedelen af ​​besparelsen er fra den første marks beskæring. Det tilfælde, hvor dette ikke vil være tilfældet, er, når forespørgslen er dækket af indekset, eller rækkefølgen/sorteringen af ​​resultaterne kan udledes af indekset.

HTH - Rob.



  1. MongoDB dropIndex()

  2. Mongoose sub document pre remove middleware ikke kaldt

  3. Sådan bruges Memcached With Yii2 Framework

  4. Er der noget multicore-udnyttende NoSQL-system?