Comment améliorer les requêtes avec l'indexation MongoDB

Comment Ameliorer Les Requetes Avec L Indexation Mongodb



L'amélioration de la vitesse des requêtes est essentielle pour MongoDB et tous les autres systèmes de bases de données. En créant des structures de données qui aident MongoDB à identifier les enregistrements plus rapidement, l'indexation constitue une approche puissante pour accélérer et optimiser les recherches. Les index incluent des copies de certaines données des dossiers pour rendre les enquêtes plus efficaces. Cela rationalise les efforts nécessaires pour répondre aux demandes dans MongoDB. Dans ce guide, nous aborderons l'utilisation des index à l'aide de différents types d'indexation.

Créer une collection

Avant d'utiliser des index, nous devons créer une nouvelle collection dans notre MongoDB. Nous en avons déjà créé un et inséré 10 documents, nommés « Factice ». La fonction find() MongoDB affiche tous les enregistrements de la collection « Dummy » sur l'écran du shell MongoDB ci-dessous.

test> db.Dummy.find()







Choisir le type d'indexation

Avant d'établir un index, vous devez d'abord déterminer les colonnes qui seront couramment utilisées dans les critères de requête. Les index fonctionnent bien sur les colonnes fréquemment filtrées, triées ou recherchées. Les champs avec une grande cardinalité (de nombreuses valeurs différentes) constituent souvent d'excellentes options d'indexation. Voici quelques exemples de code pour différents types d'index.



Exemple 01 : Index à champ unique

Il s’agit probablement du type d’index le plus fondamental, qui indexe une seule colonne pour améliorer la vitesse des requêtes sur cette colonne. Ce type d'index est utilisé pour les requêtes dans lesquelles vous utilisez un seul champ clé pour interroger les enregistrements de collection. Supposons que vous utilisez le champ « type » pour interroger les enregistrements de la collection « Factice » dans la fonction de recherche comme ci-dessous. Cette commande parcourrait l’ensemble de la collection, ce qui pourrait prendre beaucoup de temps pour le traitement d’énormes collections. Par conséquent, nous devons optimiser les performances de cette requête.



test> db.Dummy.find({type : 'emp' })





Les enregistrements de la collection Dummy ci-dessus ont été trouvés à l'aide du champ « type », c'est-à-dire contenant une condition. Par conséquent, l'index à clé unique peut être utilisé ici pour optimiser la requête de recherche. Nous allons donc utiliser la fonction createIndex() de MongoDB pour créer un index sur le champ « type » de la collection « Dummy ». L'illustration de l'utilisation de cette requête affiche la création réussie d'un index à clé unique nommé « type_1 » sur le shell.

test> db.Dummy.createIndex({ tapez : 1 })

Utilisons la requête find() une fois qu'elle utilise le champ « type ». L'opération sera désormais beaucoup plus rapide que la fonction find() précédemment utilisée car l'index est en place car MongoDB peut utiliser l'index pour récupérer rapidement les enregistrements avec le titre de poste demandé.



test> db.Dummy.find({type : 'emp' })

Exemple 02 : Indice composé

Nous pouvons vouloir rechercher des éléments en fonction de divers critères dans certaines circonstances. La mise en œuvre d'un index composé pour ces champs peut contribuer à améliorer les performances des requêtes. Disons que cette fois, vous souhaitez effectuer une recherche dans la collection « Factice » en utilisant plusieurs champs contenant différentes conditions de recherche lors de l'affichage de la requête. Cette requête a recherché des enregistrements de la collection où le champ « type » est défini sur « emp » et le champ « sal » est supérieur à 350.

L'opérateur logique $gte a été utilisé pour appliquer la condition au champ « sal ». Au total, deux enregistrements ont été renvoyés après une recherche dans l'ensemble de la collection, qui comprend 10 enregistrements.

test> db.Dummy.find({type : 'emp' , sal : {$gte : 350 } })

Créons un index composé pour la requête susmentionnée. Cet index composé comporte des champs « type » et « sal ». Les nombres « 1 » et « -1 » représentent respectivement l'ordre croissant et décroissant pour les champs « type » et « sal ». La séquence des colonnes de l’index composé est importante et doit correspondre aux modèles de requête. Le MongoDB a donné le nom « type_1_sal_-1 » à cet index composé tel qu'affiché.

test> db.Dummy.createIndex({ tapez : 1 , volonté:- 1 })

Après avoir utilisé la même requête find() pour rechercher des enregistrements avec la valeur du champ « type » comme « emp » et la valeur du champ « sal » supérieure à 350, nous avons obtenu le même résultat avec un léger changement dans l'ordre. par rapport au résultat de la requête précédente. L'enregistrement de valeur la plus élevée pour le champ « sal » est désormais à la première place, tandis que le plus petit est au plus bas selon le « -1 » défini pour le champ « sal » dans l'index composé ci-dessus.

test> db.Dummy.find({type : 'emp' , sal : {$gte : 350 } })

Exemple 03 : Index de texte

Parfois, vous pouvez rencontrer une situation dans laquelle vous devez traiter un grand ensemble de données, comme de grandes descriptions de produits, d'ingrédients, etc. Un index de texte peut être utile pour effectuer des recherches en texte intégral sur un grand champ de texte. Par exemple, nous avons créé une nouvelle collection nommée « Test » dans notre base de données de tests. Inséré un total de 6 enregistrements dans cette collection à l'aide de la fonction insertMany() selon la requête find() ci-dessous.

test> db.Test.insertMany([

{nom: 'Ana' , des: 'Elle vit à Londres et est une bonne enseignante' },

{nom: 'Robert' , des: 'C'est un footballeur tellement génial' },

{nom: 'depuis' , des: 'Peut-être voyager à Dubaï' },

{nom: 'Jacob' , des: 'Il est époustouflant et riche.' },

{nom: 'Cillian' , des: 'Un super début de film est devenu célèbre en un rien de temps' },

{nom: 'Ken' , des: 'Amoureuse de nourriture. Elle peut aussi te manger.' }

])

Maintenant, nous allons créer un index de texte sur le champ « Des » de cette collection, en utilisant la fonction createIndex() de MongoDB. Le mot-clé « texte » dans la valeur du champ affiche le type d'index, qui est un index « texte ». Le nom de l'index, des_text, a été généré automatiquement.

test> db.Test.createIndex({ des : 'texte' })

Désormais, la fonction find() a été utilisée pour effectuer la « recherche textuelle » sur la collection via l'index « des_text ». L'opérateur $search a été utilisé pour rechercher le mot « nourriture » dans les enregistrements de collection et afficher cet enregistrement particulier.

test> db.Test.find({ $text : { $search : 'nourriture' }});

Vérifier les index :

Vous pouvez vérifier et répertorier tous les index appliqués des différentes collections dans votre MongoDB. Pour cela, utilisez la méthode getIndexes() avec le nom d'une collection dans l'écran de votre shell MongoDB. Nous avons utilisé cette commande séparément pour les collections « Test » et « Dummy ». Cela affiche toutes les informations nécessaires concernant les index intégrés et définis par l'utilisateur sur votre écran.

test> db.Test.getIndexes()

test> db.Dummy.getIndexes()

Supprimer les index :

Il est temps de supprimer les index précédemment créés pour la collection à l'aide de la fonction dropIndex() avec le même nom de champ auquel l'index a été appliqué. La requête ci-dessous montre que l'index unique a été supprimé.

test> db.Dummy.dropIndex({type : 1 })

De la même manière, l'indice composé peut être supprimé.

test> db.Dummy.drop index({type : 1 , volonté: 1 })

Conclusion

En accélérant la récupération des données de MongoDB, l'indexation est essentielle pour améliorer l'efficacité des requêtes. Faute d'index, MongoDB doit rechercher dans toute la collection les enregistrements correspondants, ce qui devient moins efficace à mesure que la taille de l'ensemble augmente. La capacité de MongoDB à découvrir rapidement les bons enregistrements à l'aide de la structure de la base de données d'index accélère le traitement des requêtes lorsqu'une indexation appropriée est utilisée.