Présentation des index

Cette page décrit l'indexation pour Cloud Firestore. Cloud Firestore ne crée aucun index par défaut. Pour améliorer les performances de la base de données, créez des index pour les requêtes les plus courantes.

Les index ont un impact important sur les performances d'une base de données. Si un index existe pour une requête, la base de données peut renvoyer efficacement des résultats en réduisant la quantité de données à analyser et le travail nécessaire pour trier les résultats. Toutefois, les entrées d'index augmentent les coûts de stockage et la quantité de travail effectuée lors d'une opération d'écriture sur des champs indexés.

Définition et structure des index

Un index se compose des éléments suivants :

  • un ID de collection
  • une liste de champs dans la collection donnée
  • un ordre, croissant ou décroissant, pour chaque champ

Un index peut également activer les options sparse, multikey ou unique.

Ordre des index

L'ordre et le sens de tri de chaque champ définissent l'index de manière unique. Par exemple, les index suivants sont deux index distincts et ne sont pas interchangeables :

Collection Champs
villes pays (ordre croissant), population (ordre décroissant)
villes population (ordre décroissant), pays (ordre croissant)

Lorsque vous créez un index pour prendre en charge une requête, incluez les champs dans le même ordre que dans votre requête.

Densité des index

Par défaut, les entrées d'index stockent les données de tous les documents d'une collection. On parle alors d'index non sparse. Une entrée d'index est ajoutée pour un document, que celui-ci contienne ou non l'un des champs spécifiés dans l'index. Les champs inexistants sont traités comme ayant une valeur NULL lors de la génération des entrées d'index. Pour modifier ce comportement, vous pouvez définir l'index comme un index sparse.

Index sparse

Un index sparse n'indexe que les documents de la collection contenant une valeur (y compris nulle) pour au moins l'un des champs indexés. Un index sparse réduit les coûts de stockage et peut améliorer les performances.

Index multiclés pour les valeurs de tableau

Si vous créez un index sur un champ contenant des valeurs de tableau, vous devez créer un index multiclés. Un index standard ne peut pas indexer les valeurs de tableau. Un index multiclés accepte jusqu'à un champ de tableau dans la définition de l'index et peut être utilisé pour les opérations qui parcourent les valeurs de tableau.

N'utilisez les index multiclés que si vous savez que vous devez indexer des valeurs de tableau. Les index standards présentent des avantages lors du traitement d'une requête. Par exemple, ils peuvent filtrer plus efficacement les valeurs dans une plage.

Les situations suivantes entraînent des erreurs lorsque vous utilisez des valeurs de tableau et des index multiclés :

  • Une opération tente d'ajouter une valeur de tableau à un champ indexé par un index standard. Pour ajouter la valeur de tableau, vous devez supprimer les index standards existants sur ce champ et les recréer en tant qu'index multiclés.
  • Vous tentez de créer un index standard sur un champ contenant une valeur de tableau. Vous devez créer un index multiclés ou supprimer les valeurs de tableau.
  • Une opération tente d'indexer plusieurs champs avec des valeurs de tableau. Vous ne pouvez pas avoir plus d'un champ avec une valeur de tableau dans un index multiclés. Pour continuer, modifiez votre modèle de données ou vos définitions d'index.
  • Vous tentez de créer un index multiclés dans lequel deux chemins de champ partagent un préfixe commun, tel que users.posts et users.zip.

Index uniques

Définissez l'option d'index unique pour appliquer des valeurs uniques aux champs indexés. Pour les index sur plusieurs champs, chaque combinaison de valeurs doit être unique dans l'index. La base de données rejette toutes les opérations de mise à jour et d'insertion qui tentent de créer des entrées d'index avec des valeurs en double. Si les données des champs indexés contiennent des valeurs en double et que vous tentez de créer un index unique, la création de l'index échoue et un message d'erreur s'affiche dans les détails de l'opération.

Champs absents dans un index unique

Si vous insérez un document avec des champs manquants pour l'index unique, l'index définit des valeurs null pour les champs manquants. L'entrée d'index résultante doit être unique, sinon l'opération échoue.

Par exemple, avec cet index :

db.cities.createIndex( { "name": 1 }, { unique: true } )

Si vous ajoutez le document {"abbreviation": "LA"} à la collection, l'index unique crée une entrée avec name défini sur null. Si vous essayez ensuite d'ajouter le document {"abbreviation": "NYC"}, l'opération échoue, car l'entrée résultante pour l'index unique est la même.

Le même comportement s'applique aux index uniques avec plusieurs champs. Lors de la création ou de la mise à jour d'un document, les champs indexés manquants sont définis sur null, et l'entrée d'index résultante doit être unique dans l'index.

Index TTL

Utilisez des index TTL pour supprimer automatiquement les données obsolètes de vos bases de données. Un index TTL désigne un champ donné comme délai d'expiration pour les documents d'une collection donnée. Avec TTL, vous pouvez réduire les coûts de stockage en supprimant les données obsolètes. Les données sont généralement supprimées dans les 24 heures suivant leur délai d'expiration.

Résoudre les erreurs de création d'index

Vous pouvez rencontrer des erreurs de création d'index lorsque vous gérez vos index. Une opération d'indexation peut échouer si la base de données rencontre un problème avec les données. Les opérations d'indexation peuvent échouer pour les raisons suivantes :

  • Vous avez atteint une limite d'index. Par exemple, l'opération peut avoir atteint le nombre maximal d'entrées d'index par document. Si la création de l'index échoue, un message d'erreur s'affiche. Si vous n'avez pas atteint de limite d'index, réessayez l'opération d'index.
  • Un index multiclés est requis. Au moins l'un des champs indexés contient une valeur de tableau. Pour continuer, vous devez utiliser un index multiclés ou supprimer les valeurs de tableau.
  • Une opération tente d'indexer plusieurs champs avec des valeurs de tableau. Vous ne pouvez pas avoir plus d'un champ avec une valeur de tableau dans un index multiclés. Pour continuer, modifiez votre modèle de données ou vos définitions d'index.
  • Vous avez défini l'option d'index unique, et les données des champs indexés créeraient des entrées d'index en double. Pour continuer, supprimez les combinaisons de valeurs en double des données.

Étape suivante