Explica cuándo una consulta puede resolverse completamente desde un índice sin leer documentos y qué requisitos tienen filtro, proyección y campos multikey.
Una puede resolver filtro y projection utilizando únicamente un índice, sin leer los documentos de la colección. Esto elimina el stage y puede reducir I/O y latencia.
Un índice suele contener una representación más compacta que los documentos completos. Si el working set del índice cabe mejor en memoria, se reducen lecturas de páginas y deserialización.
Pero el beneficio depende de frecuencia, tamaño de documentos y selectividad.
La cobertura con índices multikey tiene restricciones. Si proyectas el propio array o la query requiere correlación de elementos, MongoDB puede necesitar FETCH.
Ejemplo:
JavaScript
{businessId:1,tags:1}
Buscar por tags puede usar el índice, pero proyectar tags no siempre es cubierto debido a que las entradas de índice no reconstruyen necesariamente el array original.
El índice y la query deben usar collation compatible. Una query case-insensitive con collation distinta puede no usar el índice esperado y perder cobertura.
Los índices representan valores según reglas específicas. Queries que distinguen missing, null o $exists pueden requerir leer documentos. No asumas que toda comparación sobre un campo indexado es cubierta.
En una colección sharded, el router puede necesitar información adicional para targeting o merge. La shard key y estructura del plan distribuido afectan si el flujo completo evita lecturas de documentos.
Antes de extenderlo, mide si FETCH realmente es el cuello de botella. Si los documentos son pequeños y están en cache, el índice mayor puede costar más de lo que ahorra.
Una covered query elimina la lectura del documento, pero requiere que filtro, orden y salida vivan en un índice compatible. Es una optimización selectiva, no una meta universal. Confírmala con totalDocsExamined: 0 y ausencia de FETCH.