Ordningen på fälten i indexet har betydelse; det bästa sammansatta indexet för ditt sök- och sorteringsexempel skulle faktiskt vara:
db.test.ensure_index([("xxx",1),("_id",-1)])
Eftersom dina sökkriterier är i fältet "xxx", kommer du att få fler resultat om du sätter detta fält först i indexet än att söka efter _id
och filtrera sedan till dokument som matchar din xxx
kriterier.
Om du tittar på n
nummer för varje plan som beaktas av frågeoptimeraren i allPlans
, BtreeCursor xxx_1
index ger faktiskt flest resultat (34). De andra indexen returnerar 9, 10 och 16 resultat ... så det skulle vara mindre effektivt för de givna sökkriterierna.
För mer information om indexoptimering är den här artikeln till stor hjälp:Optimera MongoDB Compound Indexes a> .