MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB:Indexreihenfolge und Abfragereihenfolge müssen übereinstimmen?

Die Reihenfolge der Bedingungen in Ihrer Abfrage hat keinen Einfluss darauf, ob ein Index verwendet werden kann oder nicht.

z.B.typische Dokumentenstruktur:

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

Wenn Sie einen zusammengesetzten Index für A und B haben:

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

Dann können die beiden folgenden Abfragen diesen Index verwenden:

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

Die Reihenfolge der Bedingungen in der Abfrage verhindert also nicht, dass der Index verwendet wird - was meiner Meinung nach die Frage ist, die Sie stellen.

Sie können dies leicht testen, indem Sie die beiden Abfragen in der Shell ausprobieren und .explain() hinzufügen nach dem Fund. Ich habe dies nur zur Bestätigung getan, und beide zeigten, dass der zusammengesetzte Index verwendet wurde.

Wenn Sie jedoch die folgende Abfrage ausführen, wird der Index NICHT verwendet, da FeldA nicht abgefragt wird:

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

Es ist also die Reihenfolge der Felder im Index, die definiert, ob er von einer Abfrage verwendet werden kann, und nicht die Reihenfolge der Felder in der Abfrage selbst (darauf bezog sich Lucas).