Les clés pour une performance optimisée

Lorsque la taille d’une collection Mongodb commence à être importante, comme avec toute autre base de données, on est rapidement confronté à des problèmes de performance. C’est là qu’entrent en jeu les index, pour améliorer l’efficacité de l’exécution des requêtes.

Qu’est-ce qu’un index ?

L’indexation est un recensement des données d’une collection selon certains critères, choisis en fonction des requêtes les plus fréquentes. Si on prend l’exemple d’une collection contenant des données sur des restaurants, on peut imaginer un index sur le style culinaire: français, italien, japonais, mexicain… Cet index permettrait de trouver rapidement tous les restaurants mexicains parmi les milliers de restaurants présents en base. On pourrait aussi indexer la ville du restaurant, ainsi un utilisateur pourra rapidement obtenir la liste des restaurants existants à Bruxelles. 

Pourquoi les index sont essentiels dans MongoDB

Que se passe-t-il réellement sous le capot quand une collection MongoDB n’est pas indexée ? Ou plus précisément, si aucun index spécifique n’a été créé. Pour chaque requête, MongoDB doit parcourir chaque document de la collection pour vérifier s’il correspond aux critères de la requête. C’est ce qu’on appelle un « collection scan« . Cette vérification peut devenir très lente à mesure que la collection grandit, voire se conclure par un échec de la requête (via un timeout) si une réponse n’est pas renvoyée assez rapidement. 

En revanche, avec un index approprié, MongoDB peut rapidement localiser les documents pertinents sans avoir à les examiner un à un, ce qui améliore considérablement les performances. On parle alors d’un « index scan« , qui est beaucoup plus rapide que le « collection scan« . 

Il faut garder à l’esprit que dans le cadre d’une utilisation de MongoDB Atlas, la performance a un impact sur la facturation, car Atlas facture en fonction des ressources consommées. Un bon choix d’index permet donc d’avoir à la fois des performances excellentes et un coût maîtrisé.

Comment MongoDB utilise les index

Lors d’un index scan, le moteur de requête de MongoDB (appelé « query planner« ) évalue les index disponibles pour déterminer lequel est le plus efficace pour exécuter la requête. Il prend en compte plusieurs facteurs, tels que la sélectivité de l’index (c’est-à-dire combien de documents correspondent à chaque valeur d’index), la taille de l’index et la structure de la requête.

Il existe plusieurs types d’index dans MongoDB, notamment les index simples et les index composés. Les index simples sont créés sur un seul champ, tandis que les index composés sont créés sur plusieurs champs. Les index composés peuvent être particulièrement utiles pour les requêtes qui filtrent ou trient par plusieurs champs, mais ils doivent être conçus avec soin pour éviter les problèmes de performance.

 Il est important de noter que l’ordre des champs dans un index composé est crucial. Par exemple, si on considère un index composé sur les champs « age » et « name » :

{ age: 1, name: 1 }

Cet index sera efficace pour les requêtes qui filtrent d’abord par « age » puis par « name« , ainsi que pour les requêtes portant sur l’âge. En revanche, si les requêtes filtrent par “name” , l’index ne sera pas utilisé et les performances seront alors médiocres.

Un bon index permettra donc de constater des améliorations de performance, tandis qu’un index mal conçu ne sera tout simplement pas utilisé par le query planner s’il ne correspond pas aux requêtes réelles. Les index ont néanmoins un coût; chaque écriture (insert, update, delete) doit mettre à jour les index, ce qui explique pourquoi il ne faut pas en abuser. Il faudra être sélectif et stratégique pour définir les index indispensables.

Dans un prochain article, nous aborderons quelques conseils pour choisir et concevoir des index composés efficaces.

Émilie BOEGLEN

Développeur web fullstack

Aller au contenu principal