Consulta de índice cubierto de MongoDB
La documentación oficial de MongoDB indica que una consulta cubierta es la siguiente:
- Todos los campos de la consulta son parte de un índice
- Todos los campos devueltos por la consulta están en el mismo índice
Dado que todos los campos que aparecen en la consulta son parte de un índice, MongoDB no necesita buscar en todos los documentos de datos para hacer coincidir las condiciones de la consulta y devolver los resultados de la consulta utilizando el mismo índice.
Debido a que el índice reside en la RAM, obtener datos del índice es mucho más rápido que leer datos escaneando documentos.
Usar consultas de índice cubierto
Para probar la consulta de índice cubierto, usa la siguiente colección users:
{
"_id": ObjectId("53402597d852426020000002"),
"contact": "987654321",
"dob": "01-01-1991",
"gender": "M",
"name": "Tom Benzamin",
"user_name": "tombenzamin"
}
En la colección users, creamos un índice compuesto con los campos gender y user_name:
>db.users.createIndex({gender:1,user_name:1})
Nota:Las versiones anteriores a la 5.0 pueden usar db.collection.ensureIndex(), pero ensureIndex() fue eliminado después de la versión 5.0; usa createIndex() en su lugar.
Ahora, este índice cubrirá la siguiente consulta:
>db.users.find({gender:"M"},{user_name:1,_id:0})
Es decir, para la consulta anterior, MongoDB no buscará en los archivos de la base de datos. En cambio, extraerá los datos del índice, lo que hace que la consulta de datos sea muy rápida.
Dado que nuestro índice no incluye el campo _id, _id se devuelve por defecto en la consulta. Podemos excluirlo del conjunto de resultados de la consulta en MongoDB.
El siguiente ejemplo no excluye _id, por lo que la consulta no estará cubierta:
>db.users.find({gender:"M"},{user_name:1})
Finalmente, si se trata de las siguientes consultas, no se puede utilizar una consulta de índice cubierto:
- Todos los campos de índice son un array
- Todos los campos de índice son un subdocumento