L'ordre des champs dans l'index est important ; le meilleur index composé pour votre exemple de recherche et de tri serait en fait :
db.test.ensure_index([("xxx",1),("_id",-1)])
Puisque vos critères de recherche sont sur le champ 'xxx', mettre ce champ en premier dans l'index trouvera plus de résultats qu'une recherche par _id
puis filtrer les documents correspondant à votre xxx
critères.
Si vous regardez le n
nombre pour chaque plan considéré par l'optimiseur de requête dans allPlans
, le BtreeCursor xxx_1
index renvoie en fait le plus de résultats (34). Les autres index renvoient 9, 10 et 16 résultats .. seraient donc moins efficaces pour les critères de recherche donnés.
Pour plus d'informations sur l'optimisation des index, cet article est très utile :Optimisation des index composés MongoDB .