Índices en MongoDB: por qué tu consulta es lenta
Mario Rojas
1 min de lectura

Con 100 documentos todo es rápido. Con 100.000, una consulta que tardaba milisegundos empieza a tardar segundos. Casi siempre la causa es la misma: falta un índice.
Qué hace un índice
Sin índice, MongoDB revisa cada documento de la colección (un COLLSCAN). Con índice, va directo a los que coinciden, como buscar en el índice de un libro en vez de leerlo entero.
Cómo saber si tu consulta lo usa
db.posts.find({ author: ObjectId("...") }).explain("executionStats");
Fíjate en:
stage: "COLLSCAN"→ está recorriendo todo. Mala señal.stage: "IXSCAN"→ usa un índice. Bien.totalDocsExaminedvsnReturned→ si examina 50.000 para devolver 10, algo falta.
Crear un índice
db.posts.createIndex({ author: 1 });
Con Mongoose, en el esquema:
postSchema.index({ author: 1 });
Índices compuestos
Si siempre filtras por autor y ordenas por fecha:
postSchema.index({ author: 1, createdAt: -1 });
El orden importa: sirve para buscar por author solo, o por author + createdAt, pero no por createdAt solo.
No indexes todo
Cada índice ocupa espacio y hace más lentas las escrituras, porque hay que actualizarlo en cada inserción. Indexa los campos por los que filtras u ordenas con frecuencia.
Un índice que ya tienes
Si en tu esquema pusiste unique: true (por ejemplo en el email), Mongoose ya creó un índice para ese campo. Por eso buscar un usuario por email es rápido aunque tengas miles.