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

Hvad er den korrekte måde at indeksere i MongoDB, når der findes en stor kombination af felter

Generelt er indekser kun nyttige, hvis de er over en selektiv Mark. Det betyder, at antallet af dokumenter, der har en bestemt værdi, er lille i forhold til det samlede antal dokumenter.

Hvad "lille" betyder, afhænger af datasættet og forespørgslen. En selektivitet på 1 % er ret sikker, når man skal afgøre, om et indeks giver mening. Hvis der findes en bestemt værdi i f.eks. 10 % af dokumenterne, kan det være mere effektivt at udføre en tabelscanning end at bruge et indeks over det respektive felt.

Med det i tankerne vil nogle af dine felter være selektive og nogle bliver det ikke. For eksempel formoder jeg, at filtrering efter "OK" ikke vil være særlig selektiv. Du kan eliminere ikke-selektive felter fra indekseringsovervejelser - hvis nogen vil have alle ordrer, der er "OK" uden andre betingelser, ender de med at lave en tabelscanning. Hvis nogen ønsker ordrer, der er "OK" og har andre betingelser, vil det indeks, der er gældende for andre betingelser, blive brugt.

Nu hvor du står tilbage med selektive (eller i det mindste noget selektive) felter, skal du overveje, hvilke forespørgsler der er både populære og selektive. For eksempel ville mærke+type måske være sådan en kombination. Du kan tilføje sammensatte indekser, der matcher populære forespørgsler, som du forventer er selektive.

Hvad sker der nu, hvis nogen kun filtrerer efter mærke? Dette kan være selektivt eller ej afhængigt af dataene. Hvis du allerede har et sammensat indeks for brand+type, vil du lade det være op til databasen at afgøre, om en forespørgsel udelukkende er mere effektiv at opfylde via brand+type-indekset eller via en samlingsscanning.

Fortsæt på denne måde med andre populære forespørgsler og felter.



  1. MongoDB findOneAndReplace()

  2. Hvordan konfigurerer man en forbindelse til Redis Sentinel ved hjælp af Jedis-biblioteket?

  3. Redis Keyspace-meddelelser med flushdb

  4. Kan du have mongo $push prepend i stedet for append?