View a markdown version of this page

Index composé avec plus de 3 attributs - Amazon DocumentDB

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Index composé avec plus de 3 attributs

Présentation de

Un index composé ou composite conserve des références à plusieurs champs au sein d'une structure d'index unique. Ces index optimisent les performances des requêtes qui filtrent simultanément sur plusieurs champs ou combinent le filtrage et les opérations de tri. Ils sont également efficaces pour les requêtes à condition unique sur les champs indexés les plus à gauche. La base de données utilise ces entrées d'index pour localiser efficacement les documents correspondants sans effectuer de numérisation complète des collections.

Amazon DocumentDB peut utiliser un index composé pour prendre en charge les requêtes qui incluent n'importe quel sous-ensemble principal des champs indexés, un concept connu sous le nom de préfixes d'index. Par exemple, si vous avez activé un index composé{state: 1, city: 1, zipcode: 1}, Amazon DocumentDB peut traiter efficacement les requêtes qui utilisent le champ « state » uniquement, les champs « state » et « city » ensemble, ou les trois champs « state », « city » et « zipcode ». Toutefois, les requêtes doivent utiliser les champs de gauche à droite sans omettre aucun champ intermédiaire. Cela signifie que les requêtes utilisant uniquement le champ « ville » ou « code postal », ou des combinaisons telles que « État » et « code postal » (en omettant « ville »), ne peuvent pas utiliser pleinement l'index.

Dans la plupart des scénarios du monde réel, les indices composés dotés de trois attributs ou moins permettent généralement d'obtenir des performances et une efficacité des ressources optimales. Bien qu'il soit possible d'avoir plus de 3 attributs dans l'indice composite, cela entraîne souvent une augmentation de la consommation de ressources, qui l'emporte sur les avantages.

Impact sur le cluster

Bien qu'il soit tentant de créer un index couvrant toutes les conditions d'une requête pour obtenir des performances théoriques maximales, la plupart du filtrage des données s'effectue via les 1 à 3 premiers attributs d'un index composite. Les champs supplémentaires au-delà de ce seuil contribuent principalement à la taille de l'index plutôt qu'à une optimisation significative des requêtes.

Stockage et I/O frais généraux : les index composites dotés de nombreux attributs consomment beaucoup plus d'espace de stockage que les alternatives plus simples. La taille est directement proportionnelle au nombre d'attributs indexés et à la taille des valeurs indexées elles-mêmes.

Empreinte mémoire : l'encombrement de stockage important des index composites dotés de nombreux attributs crée une empreinte correspondante dans la mémoire, ce qui augmente votre espace de travail et déplace les autres données fréquemment consultées du pool de mémoire tampon.

Opérations d'écriture : Chaque modification de document affectant plusieurs champs indexés nécessite la mise à jour complète de l'entrée d'index composite, multipliant ainsi le travail requis pour terminer l'opération d'écriture.

Comment identifier

Commencez par examiner tous les index de votre collection afin d'identifier les index composites dotés de plus de trois attributs :

// List all indexes for the collection db.collection.getIndexes() // Look for indexes with 3+ fields like: // { "userId": 1, "status": 1, "category": 1, "priority": 1, "region": 1 } // { "orderId": 1, "customerId": 1, "productId": 1, "timestamp": 1, "warehouse": 1 }

Correction

Si un index composite comportant plus de trois attributs est utilisé, identifiez les requêtes qui l'utilisent et recherchez des opportunités d'optimisation. Envisagez de remplacer ces index par des index plus efficaces contenant trois attributs ou moins. Après avoir implémenté les nouveaux index, supprimez les anciens index contenant plus de trois attributs.

Note

Coordonnez-vous toujours avec les parties prenantes et validez l'impact sur les performances avant de supprimer des index.

Respectez la règle Equality, Sort, Range (ESR) lors de la création d'index composites.

Règle ESR (Equality Sort Range) : cet ordre maximise l'efficacité de l'index en filtrant d'abord l'ensemble de données avec des conditions d'égalité, puis en appliquant des opérations de tri sur l'ensemble réduit, et enfin en effectuant des scans de plage sur le plus petit sous-ensemble possible

  • classer les champs sous forme d'égalité (correspondances exactes),

  • Trier (ordre),

  • Plage (>, <, $in).

// Query pattern db.orders.find({ userId: "user123", // Equality price: { $gte: 50, $lte: 200 } // Range }).sort({ createdAt: -1 }) // Sort // Optimal index following ESR rule db.orders.createIndex({ userId: 1, createdAt: -1, price: 1 }) // Equality Sort Range