MongoDB

Optimisation de MongoDB avec les index clairsemés

Spread the love

Table des matières

Qu’est-ce qu’un index creux ?

Dans MongoDB, un index creux est une technique d’optimisation puissante qui indexe uniquement les documents contenant un champ spécifique avec une valeur non nulle. Contrairement aux index standard, qui incluent tous les documents d’une collection, les index creux indexent sélectivement les documents en fonction de la présence d’un champ. Cela se traduit par des index plus petits et plus efficaces, particulièrement bénéfique pour les collections contenant de nombreux documents où le champ indexé peut être absent dans une partie importante d’entre eux.

Par exemple, considérons une collection de documents utilisateur avec un champ active indiquant le statut du compte. Un index creux sur active n’indexerait que les documents où active est vrai (ou toute autre valeur non nulle). Les documents avec active défini sur null ou indéfini seraient exclus de l’index.

Avantages des index creux

L’utilisation d’index creux offre plusieurs avantages clés :

  • Taille de l’index réduite : Une taille d’index plus petite sur le disque se traduit par une création d’index plus rapide et une consommation d’espace de stockage moindre.
  • Amélioration des performances des requêtes : Les requêtes filtrant sur le champ de l’index creux sont considérablement plus rapides car le moteur de requête recherche un index plus petit.
  • Meilleure utilisation de la mémoire : Des index plus petits consomment moins de mémoire, ce qui est crucial pour les collections contenant un grand nombre de documents.
  • Optimisé pour les requêtes spécifiques : Idéal pour les requêtes fréquentes ciblant les documents où un champ spécifique existe, tandis que de nombreux documents manquent ce champ.

Création d’index creux dans MongoDB

La création d’un index creux est simple à l’aide de la commande createIndex() avec l’option sparse : true. Pour créer un index creux sur le champ active (ascendant) :


db.users.createIndex( { active: 1 }, { sparse: true } );

Pour un index descendant, utilisez -1 au lieu de 1.

Requêtes avec des index creux

MongoDB utilise automatiquement un index creux si la requête correspond aux critères du champ indexé. La requête suivante utilisera l’index creux créé ci-dessus :


db.users.find( { active: true } );

Les requêtes sans le champ indexé ou utilisant des filtres différents peuvent ne pas bénéficier de l’index creux.

Considérations lors de l’utilisation d’index creux

Bien qu’avantageux, tenez compte de ces points :

  • Sélectivité des requêtes : Les index creux sont plus efficaces lorsque le champ indexé est absent dans une grande partie des documents. Si la plupart des documents contiennent le champ, les gains d’espace peuvent être minimes.
  • Requêtes complexes : Les requêtes complexes impliquant plusieurs champs peuvent ne pas exploiter pleinement l’index creux.
  • Maintenance de l’index : Les mises à jour et les suppressions affectent toujours les index creux, bien que moins fréquemment que les index standard.
  • Débogage : Comprendre quels documents sont indexés est essentiel pour le débogage. Utilisez db.collection.getIndexes() pour inspecter la structure de l’index.

Conclusion

Les index creux sont un outil précieux pour optimiser les performances de MongoDB, en particulier lorsqu’il s’agit de collections où un nombre important de documents peuvent manquer un champ spécifique. Une considération attentive de leurs avantages et de leurs limites est essentielle pour une utilisation efficace.

FAQ

  • Q : Puis-je avoir plusieurs index creux sur une collection ?
    A : Oui, vous pouvez créer plusieurs index creux sur une seule collection.
  • Q : Puis-je utiliser des index creux avec des index composés ?
    A : Oui, mais la parcimonie est déterminée par tous les champs de l’index composé. Un document doit avoir des valeurs non nulles pour *tous* les champs afin d’être inclus dans l’index.
  • Q : Comment vérifier si un document spécifique est inclus dans un index creux ?
    A : Il n’y a pas de commande directe. Examinez la structure de l’index à l’aide de db.collection.getIndexes() et comparez-la à vos données de document.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *