El orden de los campos en el índice importa; el mejor índice compuesto para su ejemplo de buscar y ordenar sería:
db.test.ensure_index([("xxx",1),("_id",-1)])
Dado que su criterio de búsqueda está en el campo 'xxx', al colocar este campo primero en el índice encontrará más resultados que al buscar por _id
y luego filtrar a documentos que coincidan con su xxx
criterios.
Si miras el n
número para cada plan considerado por el optimizador de consultas en allPlans
, el BtreeCursor xxx_1
índice en realidad devuelve la mayoría de los resultados (34). Los otros índices devuelven 9, 10 y 16 resultados... por lo que serían menos eficientes para los criterios de búsqueda dados.
Para obtener más información sobre la optimización de índices, este artículo es muy útil:Optimización de índices compuestos de MongoDB .