De volgorde van de voorwaarden in uw zoekopdracht heeft geen invloed op het al dan niet gebruiken van een index.
bijv. typische documentstructuur:
{
"FieldA" : "A",
"FieldB" : "B"
}
Als u een samengestelde index op A en B heeft:
db.MyCollection.ensureIndex({FieldA : 1, FieldB : 1})
Dan kunnen beide van de volgende zoekopdrachten die index gebruiken:
db.MyCollection.find({FieldA : "A", FieldB : "B"})
db.MyCollection.find({FieldB : "B", FieldA : "A"})
Dus de volgorde van de voorwaarden in de zoekopdracht verhindert niet dat de index wordt gebruikt - wat volgens mij de vraag is die u stelt.
Je kunt dit eenvoudig testen door de 2 queries in de shell te proberen en .explain()
. toe te voegen na de vondst. Ik deed dit alleen om te bevestigen, en ze lieten allebei zien dat de samengestelde index werd gebruikt.
als u echter de volgende query uitvoert, wordt de index NIET gebruikt omdat er geen query op VeldA wordt uitgevoerd:
db.MyCollection.find({FieldB : "B"})
Het is dus de volgorde van de velden in de index die bepaalt of het kan worden gebruikt door een query en niet de volgorde van de velden in de query zelf (dit was waar Lucas naar verwees).