sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur behandlar MongoDB find().sort()-frågor med avseende på enstaka och sammansatta index?

Om jag förstår din poäng kan det här hjälpa:

Förutsatt att du har dessa dokument som exempel

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

Steg 1:du har index bara för filed1 (namn på index fält1_1 )}:utför :db.test3.find({field1:1}).sort({field2:1})

mongon använder fält1_1 indexera för att söka i dokument. resultatet av .explain() är:

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

Steg 2:lägg till ditt sammansatta index, döp det till fält1_1_fält2_1 , nu har du 2 index för fält 1.

utför find().sort() fråga kommer du att ha

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

Slutsats:

om du använder db.test3.find({field1:1}).sort({field2:1}) , kommer mongon att använda field1_1_field2_1 index.

om du använder db.test3.find({field1:1}) , kommer mongon att använda field1_1 index.

I ditt fall, om du bara har field1_1_field2_1 index och du utför db.test3.find({field1:1}) , kommer mongon att använda field1_1_field2_1 index också.




  1. MongoDB $indexOfBytes

  2. Lägg till flera värden med $addToSet Mongo-operatorn

  3. När jag börjar blomma får jag följande:dbm.error:db-typen är dbm.gnu, men modulen är inte tillgänglig

  4. MongoDB självsignerad SSL-anslutning:SSL-peer-certifikatvalidering misslyckades