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

Wie behandelt MongoDB find().sort()-Abfragen in Bezug auf einzelne und zusammengesetzte Indizes?

Wenn ich Ihren Punkt verstanden habe, könnte dies helfen:

Angenommen, Sie haben diese Dokumente als Muster

{
    field1 : 1,
    field2 : 2,
},
{
    field1 : 2,
    field2 : 3,
},
{
    field1 : 1,
    field2 : 4,
}

Schritt 1:Sie haben nur einen Index für filed1 (Name des Index Feld1_1 )}:Führen Sie Folgendes durch:db.test3.find({field1:1}).sort({field2:1})

der Mongo verwendet field1_1 Index zum Suchen im Dokument. das Ergebnis von .explain() ist:

"cursor" : "BtreeCursor field1_1",
"isMultiKey" : false,
"n" : 2,
"nscannedObjects" : 2,
"nscanned" : 2,

Schritt 2:Fügen Sie Ihren zusammengesetzten Index hinzu und nennen Sie ihn field1_1_field2_1 , jetzt haben Sie 2 Index für Feld 1.

Führen Sie find().sort() aus Abfrage haben Sie

"cursor" : "BtreeCursor field1_1_field2_1",
"isMultiKey" : false,
"n" : 2,
"nscannedObjects" : 2,
"nscanned" : 2,

Fazit:

wenn Sie db.test3.find({field1:1}).sort({field2:1}) verwenden verwendet der Mongo field1_1_field2_1 index.

wenn Sie db.test3.find({field1:1}) verwenden verwendet der Mongo field1_1 index.

In Ihrem Fall, wenn Sie nur field1_1_field2_1 haben index und Sie führen db.test3.find({field1:1}) aus verwendet der Mongo field1_1_field2_1 auch indexieren.