1 · Administración y visualización
Índices de la colección
MongoDB crea automáticamente _id_. Los demás índices se crean aquí para comparar el plan antes y después.
_id_
idx_categoria
| Nombre | Campos y orden | Tipo | Espacio | Acción |
|---|---|---|---|---|
_id_ |
{"_id":1} |
Automático | 2,18 MB | Protegido |
idx_categoria |
{"categoria":1} |
Simple | 560,00 KB |
2 · Consulta general + explain()
Construya la consulta que quiera analizar
Todos los filtros son opcionales y se combinan. Los rangos usan realmente $gte y $lte. La consulta solo se ejecuta cuando presiona el botón.
COLLSCAN.{ categoria: 1 } y repita el mismo filtro → espere IXSCAN.{ categoria: 1, precio: 1 }. Categoría + Precio puede usarlo; solo Precio no tiene el mismo prefijo.db.productosGrupo5.find({ ...filtros... }).explain("executionStats")3 · Antes y después
Mismo filtro, distinto plan
La comparación solo es válida cuando el filtro es idéntico. Se guarda un COLLSCAN como “antes” y un IXSCAN posterior como “después”.
4 · INSERT y UPDATE reales desde PHP
Demuestre el costo de mantener índices
En un INSERT deben agregarse entradas a los índices aplicables. En un UPDATE, si cambia un campo indexado, también deben mantenerse sus claves de índice.
5 · Conceptos obligatorios
¿Qué es un índice?
Es una estructura auxiliar que MongoDB mantiene para localizar valores sin tener que revisar todos los documentos en cada consulta. _id_ se crea automáticamente.
- Simple: un solo campo, por ejemplo
{ categoria: 1 }. - Compuesto: varios campos ordenados, por ejemplo
{ categoria: 1, precio: 1 }. - Campos adecuados: usados con frecuencia en filtros/ordenamientos y con selectividad suficiente.
- Campo poco selectivo: un booleano como
activotiene pocos valores posibles; indexarlo solo no siempre compensa.
Costo y orden
Un índice no es gratuito
- Ocupa almacenamiento adicional, visible arriba con
collStats. INSERTdebe agregar entradas a los índices.UPDATEde campos indexados puede modificar entradas existentes.- Más índices no significa automáticamente mejor rendimiento.
- En un compuesto, el orden define el prefijo útil:
categoria → preciono equivale aprecio → categoria.
6 · Comparación relacional
MongoDB y CREATE INDEX en SQL
db.productosGrupo5.createIndex({ categoria: 1 })CREATE INDEX idx_categoria ON productos(categoria);
| Aspecto | MongoDB | Base relacional |
|---|---|---|
| Objetivo | Reducir trabajo para localizar documentos | Reducir trabajo para localizar filas |
| Índice simple | Un campo de documento | Una columna |
| Índice compuesto | Varios campos; el orden importa | Varias columnas; el orden también importa |
| Plan de ejecución | explain(), COLLSCAN/IXSCAN | EXPLAIN; términos exactos dependen del SGBD |
| Costo | Espacio + mantenimiento en escrituras | Espacio + mantenimiento en escrituras |
| Crear índices indiscriminadamente | No es recomendable: cada índice tiene costo de almacenamiento y mantenimiento; se diseña según patrones reales de consulta. | |
7 · Verificación con mongosh
Compruebe que los datos son reales
use grupo5_dbdb.productosGrupo5.countDocuments({})
db.productosGrupo5.getIndexes()
db.productosGrupo5.stats()
db.productosGrupo5.findOne({ codigo: "DEMO-..." })
mongosh sirve como verificación; la demostración principal sigue ejecutándose desde PHP.
Pregunta de cierre
¿Por qué mejora consultas y cuesta en otras operaciones?
Porque el índice puede evitar o reducir una exploración de la colección durante una lectura, pero esa estructura adicional ocupa espacio y debe mantenerse cuando se insertan documentos o cambian campos indexados.