9. Índices y rendimiento
Los índices mejoran drásticamente el rendimiento de las consultas.
¿Qué es un índice?
Un índice es una estructura de datos especial que almacena una pequeña porción de los datos de forma fácil de recorrer. Es como el índice de un libro.
Sin índice, MongoDB debe escanear toda la colección (collection scan). Con índice, MongoDB puede ir directamente a los documentos relevantes.
Ver índices
Para ver los índices de una colección:
db.unicorns.getIndexes()
Por defecto, todas las colecciones tienen un índice en _id.
Crear índices
Para crear un índice simple:
// Índice en el campo name
db.unicorns.createIndex({ name: 1 })
- 1 = orden ascendente
- -1 = orden descendente
Para índices simples, el orden no importa. Para índices compuestos, sí.
Índices compuestos
Puedes crear índices en múltiples campos:
db.unicorns.createIndex({ gender: 1, vampires: -1 })
Este índice es útil para consultas que filtran por gender y/o ordenan por vampires.
Índices únicos
Para garantizar que no haya duplicados:
db.users.createIndex({ email: 1 }, { unique: true })
Ahora no podrás insertar dos usuarios con el mismo email.
Eliminar índices
Para eliminar un índice:
db.unicorns.dropIndex({ name: 1 })
Para eliminar todos los índices excepto _id:
db.unicorns.dropIndexes()
Analizar consultas con explain
Para ver si una consulta usa índices:
db.unicorns.explain().find({ name: 'Aurora' })
Busca el campo winningPlan:
- COLLSCAN = escaneo completo (malo, lento)
- IXSCAN = usa índice (bueno, rápido)
Índices en arrays
Puedes crear índices en campos que son arrays:
db.unicorns.createIndex({ loves: 1 })
Esto crea un índice multikey que indexa cada valor del array.
Índices en campos embebidos
Puedes crear índices en campos de documentos embebidos:
db.users.createIndex({ 'address.city': 1 })
Nota la notación de punto entre comillas.
Cuándo crear índices
Crea índices cuando:
- Consultas lentas: si una consulta tarda mucho
- Campos de búsqueda: si filtras frecuentemente por un campo
- Ordenación: si ordenas frecuentemente por un campo
No creas índices innecesarios:
- Ralentizan las escrituras (INSERT, UPDATE, DELETE)
- Ocupan espacio en disco
- Cada índice consume memoria
Estadísticas de colección
Para ver estadísticas de una colección:
db.unicorns.stats()
Verás información sobre:
- Número de documentos
- Tamaño de los datos
- Tamaño de los índices
Actividad 1
- Crea un índice en el campo weight
- Crea un índice compuesto en gender y vampires
- Usa explain para ver si tu consulta usa índices:
db.unicorns.find({ weight: { $gt: 500 } }) - Elimina el índice de weight
- Vuelve a hacer explain en la misma consulta. ¿Ves la diferencia?
Este trabajo está bajo una licencia Attribution-NonCommercial-NoDerivatives 4.0 International.
Desafíos de programación atemporales y multiparadigmáticos
Te encuentras ante un librillo de actividades, divididas en 2 niveles de dificultad. Te enfrentarás a los casos más comunes que te puedes encontrar en pruebas técnicas o aprender conceptos elementales de programación.
Comprar el libro
Comentarios
Todavía no hay ningún comentario.