A ordem dos campos no índice é importante; o melhor índice composto para o seu exemplo de localização e classificação seria:
db.test.ensure_index([("xxx",1),("_id",-1)])
Como seus critérios de pesquisa estão no campo 'xxx', colocar esse campo primeiro no índice encontrará mais resultados do que pesquisar por
_id
e, em seguida, filtrando para documentos que correspondam ao seu xxx
critério. Se você olhar para o
n
número para cada plano considerado pelo otimizador de consulta em allPlans
, o BtreeCursor xxx_1
index realmente retorna a maioria dos resultados (34). Os outros índices retornam 9, 10 e 16 resultados .. portanto, seria menos eficiente para os critérios de pesquisa fornecidos. Para obter mais informações sobre otimização de índice, este artigo é muito útil:Otimizando índices compostos do MongoDB .