Index MongoDB

Les index peuvent généralement améliorer considérablement l'efficacité des requêtes. Sans index, MongoDB doit analyser chaque fichier de la collection et sélectionner les enregistrements qui correspondent aux conditions de requête lors de la lecture des données.

L'efficacité de cette requête de balayage complet de collection est très faible, surtout lors du traitement de grandes quantités de données. La requête peut prendre des dizaines de secondes, voire des minutes, ce qui est fatal pour les performances d'un site web.

Un index est une structure de données spéciale. Les index sont stockés dans une collection de données facile à parcourir et à lire. Un index est une structure qui trie les valeurs d'une ou plusieurs colonnes d'une table de base de données.

Dans MongoDB, les types d'index courants incluent :

  • Index sur un seul champ: Un index basé sur un seul champ.
  • Index composé: Un index basé sur une combinaison de plusieurs champs.
  • Index textuel: Utilisé pour prendre en charge la recherche en texte intégral.
  • Index géospatial: Utilisé pour interroger des données géospatiales.
  • Index de hachage: Un index qui effectue un hachage sur les valeurs de champ.

Créer un index

MongoDB utilise la méthode createIndex() pour créer des index.

Notez qu'avant la version 3.0.0, la méthode de création d'index était db.collection.ensureIndex(). Dans les versions ultérieures, la méthode db.collection.createIndex() est utilisée. ensureIndex() fonctionne toujours, mais ce n'est qu'un alias de createIndex().

Syntaxe

Le format de syntaxe de base de la méthode createIndex() est le suivant :

db.collection.createIndex( keys, options )
  • db: Référence à la base de données.
  • collection: Nom de la collection.
  • keys: Un objet qui spécifie le nom du champ et l'ordre de tri de l'index (1 signifie croissant, -1 signifie décroissant).
  • options: Un paramètre optionnel pouvant contenir des options supplémentaires pour l'index.

Le paramètre options est un objet qui peut contenir plusieurs options de configuration. Voici quelques options couramment utilisées :

  • unique: Si défini surtrue, un index unique est créé, garantissant que les valeurs du champ d'index sont uniques dans la collection.
  • background: Si défini surtrue, le processus de création de l'index s'exécute en arrière-plan, sans affecter les autres opérations de la base de données.
  • name: Spécifie le nom de l'index. S'il n'est pas spécifié, MongoDB générera automatiquement un nom basé sur les champs de l'index.
  • sparse: Si défini surtrue, crée un index sparse qui n'indexe que les documents contenant le champ d'index.
  • expireAfterSeconds: Définit le temps d'expiration du champ d'index ; MongoDB supprimera automatiquement les documents expirés.
  • v: Version de l'index, généralement pas besoin de la définir manuellement.
  • weights: Spécifie les pondérations pour un index textuel.

Exemple

// Créer un index croissant sur le champ age
db.myCollection.createIndex({ age: 1 });
// Créer un index textuel sur le champ name
db.myCollection.createIndex({ name: "text" });

Exemple

Création d'index :

Exemple

// Créer un index unique
db.collection.createIndex( { field: 1 }, { unique: vrai } )

// Créer un index s'exécutant en arrière-plan
db.collection.createIndex( { field: 1 }, { background: vrai } )

// Créer un index sparse
db.collection.createIndex( { field: 1 }, { sparse: vrai } )

// Créer un index textuel et spécifier les pondérations
db.collection.createIndex( { field: "text" }, { weights: { field: 10 } } )
Créer un index géospatial
Pour les champs qui stockent des données de localisation géographique, vous pouvez utiliser les types d'index 2dsphere ou 2d pour créer des index géospatiaux.

// Index 2dsphere, adapté aux données géographiques sphériques
db.collection.createIndex( { location: "2dsphere" } )

// Index 2d, adapté aux données géographiques planes
db.collection.createIndex( { location: "2d" } )

Créer un index de hachage

À partir de MongoDB 3.2, vous pouvez utiliser des index de hachage pour hacher des champs afin de prendre en charge les recherches de valeurs à grande échelle.

db.collection.createIndex( { field: "hashed" } )

Afficher l'index

Utilisez la méthode getIndexes() pour afficher tous les index d'une collection :

db.collection.getIndexes()

Supprimer l'index

Utilisez les méthodes dropIndex() ou dropIndexes() pour supprimer des index :

Exemple

// Supprimer l'index spécifié
db.collection.dropIndex( "indexName" )

// Supprimer tous les index
db.collection.dropIndexes()

Stratégie d'indexation

Lors de la création d'index, les facteurs suivants doivent être pris en compte :

  • Fréquence des requêtes: Les champs fréquemment utilisés pour les requêtes doivent être prioritaires.
  • Cardinalité du champ: Plus la cardinalité des valeurs d'un champ est élevée (c'est-à-dire plus il y a de valeurs uniques), meilleur est l'effet de l'index.
  • Taille de l'index: La taille de l'index affecte l'utilisation de la mémoire de la base de données et les performances des requêtes.

Optimisation des index

Lors de l'optimisation des index, les méthodes suivantes peuvent être envisagées :

  • Choisir le type d'index approprié: Choisissez le type d'index approprié en fonction des exigences des requêtes.
  • Créer des index composés: Pour les champs qui sont souvent utilisés ensemble, envisagez de créer un index composé afin d'améliorer l'efficacité des requêtes.
  • Surveiller les performances des index: Surveillez régulièrement l'utilisation des index et ajustez les index en fonction des besoins réels.

Notes

  • Bien que les index puissent améliorer les performances des requêtes, ils augmentent également le surcoût des opérations d'écriture. Par conséquent, lors de la création d'index, vous devez mettre en balance les performances de requête et les performances d'écriture.
  • Les index occupent un espace de stockage supplémentaire, en particulier pour les grands ensembles de données. Le coût de stockage des index doit être pris en compte.

En concevant et en utilisant les index de manière raisonnable, vous pouvez considérablement améliorer les performances de requête et la vitesse de réponse des bases de données MongoDB, ce qui permet de mieux répondre aux besoins des applications.

Autres extensions