sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB:Pořadí indexů a pořadí dotazů se musí shodovat?

Pořadí podmínek ve vašem dotazu neovlivňuje, zda může použít index nebo ne.

např. typická struktura dokumentu:

{
    "FieldA" : "A",
    "FieldB" : "B"
}

Pokud máte složený index na A a B:

db.MyCollection.ensureIndex({FieldA : 1, FieldB : 1})

Potom oba následující dotazy budou moci tento index používat:

db.MyCollection.find({FieldA : "A", FieldB : "B"})
db.MyCollection.find({FieldB : "B", FieldA : "A"})

Uspořádání podmínek v dotazu tedy nebrání použití indexu – což je myslím otázka, na kterou se ptáte.

Můžete to snadno otestovat vyzkoušením 2 dotazů v shellu a přidáním .explain() po nálezu. Udělal jsem to, abych to potvrdil, a oba ukázali, že byl použit složený index.

pokud však spustíte následující dotaz, NEBUDE to používat index, protože FieldA není dotazován:

db.MyCollection.find({FieldB : "B"})

Je to tedy pořadí polí v indexu, které definuje, zda jej lze použít v dotazu, a nikoli pořadí polí v dotazu samotném (to bylo to, na co Lucas odkazoval).



  1. Částečná aktualizace vnořeného dokumentu pomocí nodejs/mongoose

  2. Node.js, Socket.io, Redis pub/sub vysoká hlasitost, potíže s nízkou latencí

  3. Jak používat Redis s Pythonem

  4. MongoDB extrahování hodnot z BasicDBObject (Java)