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).