Cette section décrit l'indexation pour l'édition Enterprise de Cloud Firestore. L'édition Enterprise de 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 vos 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 les 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 les champs indexés.
Différences entre les éditions
Le tableau suivant présente les principales différences d'indexation entre l'édition Standard et l'édition Enterprise de Cloud Firestore.
| Fonctionnalité | Édition Standard de Cloud Firestore | Édition Enterprise de Cloud Firestore |
|---|---|---|
| Exigences d'indexation | Toutes les requêtes nécessitent des index pour s'exécuter. Les requêtes sont généralement performantes en raison de cette exigence. | Les index ne sont pas obligatoires pour les requêtes. Les lectures non indexées sont possibles, ce qui élimine un obstacle au prototypage. |
| Indexation automatique | Par défaut, des index à champ unique sont automatiquement créés pour tous les champs des documents. | Aucun index automatique. Vous devez gérer manuellement tous les index. |
| Densité de l'index | Éparse par défaut. Un document d'un groupe de collections n'est indexé que s'il contient une valeur pour chaque champ indexé. | Non-sparse par défaut. Tous les documents du groupe de collections sont indexés.
Les champs indexés sans valeur sont définis sur NULL. Le comportement peut être modifié avec l'option d'index creux. |
| Types et options d'index compatibles |
|
|
Définition et structure des index
Un index se compose des éléments suivants :
- un ID de collection ;
- Liste des champs de la collection donnée
- un ordre (croissant ou décroissant) pour chaque champ.
Un index peut également activer les options sparse 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 deux index suivants sont 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é de l'index
Par défaut, les entrées d'index stockent les données de tous les documents d'une collection. C'est ce qu'on appelle un index non clairsemé. Une entrée d'index sera 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 index creux.
Index creux
Un index à faible densité 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 creux réduit les coûts de stockage et peut améliorer les performances.
Index uniques
Définissez l'option d'index unique pour appliquer des valeurs uniques pour les 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 toute opération de mise à jour et d'insertion qui tente 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 dont il manque des champs 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 :
| Collection | Champs indexés | Champ d'application de la requête |
|---|---|---|
| villes | Nom (ordre croissant) | Collection |
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 comportant 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.
Résoudre les erreurs de création d'index
Vous risquez de 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'indexation.
- Si vous définissez l'option d'index unique, les données des champs indexés créeront des entrées d'index en double. Pour continuer, supprimez les combinaisons de valeurs en double dans les données.
Étape suivante
Découvrez comment créer et gérer des index.