Requête couverte MongoDB

La documentation officielle de MongoDB indique qu'une requête couverte est une requête dans laquelle :

  • Tous les champs de la requête font partie d'un index
  • Tous les champs renvoyés par la requête se trouvent dans le même index

Étant donné que tous les champs apparaissant dans la requête font partie d'un index, MongoDB n'a pas besoin de parcourir les documents de données dans leur intégralité pour faire correspondre les conditions de la requête et renvoyer les résultats de la requête à l'aide du même index.

Comme les index résident en RAM, la récupération des données depuis l'index est bien plus rapide que la lecture des données en balayant les documents.


Utiliser les requêtes couvertes

Pour tester les requêtes couvertes, utilisez la collection `users` suivante :

{
   "_id": ObjectId("53402597d852426020000002"),
   "contact": "987654321",
   "dob": "01-01-1991",
   "gender": "M",
   "name": "Tom Benzamin",
   "user_name": "tombenzamin"
}

Nous créons un index composé sur la collection `users` avec les champs `gender` et `user_name` :

>db.users.createIndex({gender:1,user_name:1})

Remarque :Les versions antérieures à 5.0 peuvent utiliser `db.collection.ensureIndex()`, mais `ensureIndex()` a été supprimé dans la version 5.0 ; utilisez plutôt `createIndex()`.

Maintenant, cet index couvre la requête suivante :

>db.users.find({gender:"M"},{user_name:1,_id:0})

C'est-à-dire que, pour la requête ci-dessus, MongoDB ne recherchera pas dans les fichiers de la base de données. Il extraira plutôt les données de l'index, ce qui est une requête de données très rapide.

Comme notre index n'inclut pas le champ `_id`, `_id` est renvoyé par défaut dans la requête. Nous pouvons l'exclure de l'ensemble de résultats de la requête MongoDB.

L'exemple suivant n'exclut pas `_id`, donc la requête ne sera pas couverte:

>db.users.find({gender:"M"},{user_name:1})

Enfin, les requêtes suivantes ne peuvent pas utiliser de requêtes couvertes:

  • Tous les champs d'index sont des tableaux
  • Tous les champs d'index sont un sous-document
Autres extensions