Orivel Orivel
Ouvrir le menu

Expliquer l'indexation de base de données à un développeur junior

Comparez les reponses des modeles pour cette tache benchmark en Explication et consultez scores, commentaires et exemples lies.

Connectez-vous ou inscrivez-vous pour utiliser les likes et favoris. Inscription

X f L

Sommaire

Vue d ensemble de la tache

Genres de comparaison

Explication

Modele createur de la tache

Modeles participants

Modeles evaluateurs

Consigne de la tache

Vous êtes un ingénieur logiciel senior qui encadre un développeur junior qui écrit des requêtes SQL depuis environ six mois mais qui n'a jamais créé ni pensé aux index de base de données. Il vient de se plaindre que ses requêtes sur une table de deux millions de lignes sont lentes. Écrivez une explication claire, orientée pédagogie, de l'indexation de base de données pour ce public. Votre explication doit couvrir les points suivants : 1. Ce qu'est un index de base de données et pourquoi il existe, en utilisant au...

Afficher plus

Vous êtes un ingénieur logiciel senior qui encadre un développeur junior qui écrit des requêtes SQL depuis environ six mois mais qui n'a jamais créé ni pensé aux index de base de données. Il vient de se plaindre que ses requêtes sur une table de deux millions de lignes sont lentes. Écrivez une explication claire, orientée pédagogie, de l'indexation de base de données pour ce public. Votre explication doit couvrir les points suivants : 1. Ce qu'est un index de base de données et pourquoi il existe, en utilisant au moins une analogie concrète qu'un débutant trouvera intuitive. 2. Comment un index basique (par exemple un index de type B-tree) accélère les recherches de requêtes par rapport à un balayage complet de la table, avec suffisamment de détails pour que le développeur junior comprenne conceptuellement la différence de performance. 3. Les compromis liés à l'ajout d'index, y compris les coûts qui ne sont pas immédiatement évidents. 4. Des conseils pratiques pour savoir quand ajouter un index et quand ne pas le faire, avec au moins deux exemples réalistes de chaque cas. 5. Une brève note sur les index composites et l'importance de l'ordre des colonnes à l'intérieur d'eux. Adoptez un ton encourageant et accessible, en évitant le jargon inutile tout en restant techniquement exact. L'explication doit être suffisamment complète pour que le développeur junior puisse décider en toute confiance s'il doit ajouter un index à une colonne donnée après l'avoir lue.

Politique d evaluation

Une bonne réponse doit être évaluée selon les dimensions suivantes. Premièrement, clarté et accessibilité : l'explication doit utiliser un langage simple adapté à un développeur junior, éviter le jargon non expliqué, et inclure au moins une analogie bien choisie qui éclaire réellement le concept. Deuxièmement, exactitude technique : la description du fonctionnement des index, en particulier les recherches B-tree par rapport aux balayages complets de table, doit être correcte et non trompeuse, même si elle est simpl...

Afficher plus

Une bonne réponse doit être évaluée selon les dimensions suivantes. Premièrement, clarté et accessibilité : l'explication doit utiliser un langage simple adapté à un développeur junior, éviter le jargon non expliqué, et inclure au moins une analogie bien choisie qui éclaire réellement le concept. Deuxièmement, exactitude technique : la description du fonctionnement des index, en particulier les recherches B-tree par rapport aux balayages complets de table, doit être correcte et non trompeuse, même si elle est simplifiée. Troisièmement, exhaustivité : les cinq sujets demandés doivent être traités avec un contenu significatif, pas seulement une phrase chacun. Quatrièmement, conscience des compromis : la réponse doit articuler clairement des coûts tels que des écritures plus lentes, un stockage accru et des frais de maintenance, et pas seulement les bénéfices en lecture. Cinquièmement, utilité pratique : les exemples de cas où ajouter ou ne pas ajouter un index doivent être réalistes et variés, aidant le lecteur à se forger un jugement réel. Sixièmement, couverture des index composites : l'explication de l'ordre des colonnes dans les index composites doit être exacte et fournir suffisamment de contexte pour que le lecteur comprenne pourquoi l'ordre importe. Enfin, le ton doit être encourageant et de type mentor, correspondant au scénario décrit dans l'invite. Les réponses trop superficielles, techniquement inexactes ou qui omettent des sections demandées doivent recevoir une note plus faible.

Reponses

Salut, j'ai entendu dire que vous rencontrez des problèmes de lenteur avec certaines requêtes sur cette grosse table. C'est un problème classique et une excellente occasion de parler de l'un des outils les plus importants pour les performances des bases de données : l'indexation. Ne vous inquiétez pas, le concept est assez simple une fois que vous l'avez compris. ### 1. Qu'est-ce qu'un index de base de données et pourquoi existe-t-il ? Pensez à une table de base de données sans index comme à un livre épais sans page d'index à la fin. Si vous devez trouver toutes les mentions d'un sujet spécifique, disons "Arbre...

Afficher la reponse complete

Salut, j'ai entendu dire que vous rencontrez des problèmes de lenteur avec certaines requêtes sur cette grosse table. C'est un problème classique et une excellente occasion de parler de l'un des outils les plus importants pour les performances des bases de données : l'indexation. Ne vous inquiétez pas, le concept est assez simple une fois que vous l'avez compris. ### 1. Qu'est-ce qu'un index de base de données et pourquoi existe-t-il ? Pensez à une table de base de données sans index comme à un livre épais sans page d'index à la fin. Si vous devez trouver toutes les mentions d'un sujet spécifique, disons "Arbres B", vous n'avez d'autre choix que de commencer à la page un et de lire tout le livre jusqu'à ce que vous ayez trouvé toutes les occurrences. C'est lent et inefficace. C'est ce que fait la base de données lorsqu'elle effectue un "balayage complet de table" (full table scan). Un index de base de données est exactement comme l'index au dos de ce livre. C'est une table de recherche séparée et spéciale que la base de données peut utiliser pour trouver rapidement les emplacements des données. L'index contient les valeurs de la colonne que vous avez indexée et un pointeur vers l'emplacement exact (la ligne) dans la table principale où cette valeur se trouve. Ainsi, au lieu de parcourir tout le livre, vous regardez simplement "Arbres B" dans l'index, ce qui vous donne une liste de numéros de page (par exemple, 15, 92, 210), et vous pouvez sauter directement à ces pages. C'est un raccourci énorme. ### 2. Comment un index accélère les recherches Entrons un peu plus dans les détails techniques. La plupart des bases de données utilisent une structure appelée arbre B (B-tree) pour leurs index standard. La chose essentielle à savoir sur un arbre B est qu'il s'agit d'une structure arborescente triée et auto-équilibrée. Comme les données de l'index sont triées, la base de données n'a pas à vérifier chaque entrée une par une. * **Sans index (balayage complet de table) :** Lorsque vous exécutez `SELECT * FROM users WHERE username = 'jsmith';` sur votre table de deux millions de lignes, la base de données doit parcourir les deux millions de lignes, en vérifiant la colonne `username` dans chacune d'elles pour voir si c'est 'jsmith'. Le temps nécessaire est directement proportionnel au nombre de lignes dans la table. * **Avec un index sur `username` :** La base de données ne touche pas la table principale au début. Elle accède à l'index `username`, beaucoup plus petit et trié. Elle peut utiliser un algorithme de recherche très efficace (conceptuellement similaire à une recherche binaire) pour naviguer dans l'arbre et trouver 'jsmith' en quelques étapes seulement. Une fois qu'elle a trouvé l'entrée dans l'index, elle obtient le pointeur et accède directement à la ligne complète dans la table principale. Au lieu de deux millions d'opérations, il peut n'en falloir que 10 ou 15 pour trouver les données. Cette différence est négligeable sur les petites tables, mais devient énorme sur les tables avec des millions de lignes. ### 3. Les compromis : quel est le piège ? Les index sont fantastiques pour accélérer les requêtes de lecture (`SELECT`), mais ils ne sont pas gratuits. Il y a deux coûts principaux : * **Opérations d'écriture plus lentes :** Chaque fois que vous `INSERT`, `UPDATE` ou `DELETE` une ligne dans votre table, la base de données doit effectuer un travail supplémentaire. Elle ne peut pas simplement modifier les données dans la table ; elle doit également mettre à jour chaque index de cette table pour s'assurer qu'il reste synchronisé. Plus vous avez d'index, plus vous ajoutez de surcharge à vos opérations d'écriture. * **Espace de stockage :** Un index est une chose physique qui occupe de l'espace disque. Pour une grande table, un index peut également être assez volumineux. Cela peut augmenter vos coûts de stockage et la taille de vos sauvegardes de base de données. ### 4. Conseils pratiques : quand ajouter (et ne pas ajouter) un index La clé est donc d'être stratégique. Vous ne voulez pas tout indexer, mais vous voulez indexer les bonnes choses. **Bons moments pour ajouter un index :** 1. **Sur les colonnes utilisées fréquemment dans les clauses `WHERE` :** C'est le cas d'utilisation le plus courant. Si vous avez une table `products` et que vos utilisateurs recherchent ou filtrent constamment par `product_category`, cette colonne est un candidat idéal pour un index. * *Exemple :* `SELECT * FROM products WHERE product_category = 'Electronics';` 2. **Sur les colonnes de clé étrangère :** Lorsque vous `JOIN` des tables, la base de données doit faire correspondre les valeurs des colonnes sur lesquelles vous effectuez la jointure. L'indexation de la colonne de clé étrangère du côté "plusieurs" d'une relation accélère considérablement les jointures. * *Exemple :* `SELECT o.*, c.name FROM orders o JOIN customers c ON o.customer_id = c.id;`. Vous devriez avoir un index sur `orders.customer_id`. **Quand vous pourriez NE PAS vouloir ajouter un index :** 1. **Sur les tables avec une activité d'écriture très intense et une activité de lecture très faible :** Si vous avez une table qui reçoit constamment de nouvelles lignes mais que vous la requêtetez rarement (par exemple, une table qui enregistre chaque clic sur votre site Web pour un traitement par lots ultérieur), l'ajout d'index ne fera que ralentir toutes ces insertions pour peu de bénéfices. 2. **Sur les colonnes à faible cardinalité (peu de valeurs uniques) :** Imaginez une table `users` avec une colonne booléenne `is_active` (vrai/faux). Un index ici n'est pas très utile. Si vous recherchez tous les utilisateurs actifs, vous demandez probablement 50 % ou plus de la table. La base de données déterminera probablement qu'il est plus rapide d'effectuer un balayage complet de la table plutôt que d'utiliser l'index pour récupérer les pointeurs pour la moitié des lignes de la table. ### 5. Une petite note sur les index composites Parfois, vous filtrerez sur plusieurs colonnes à la fois. Pour cela, vous pouvez créer un **index composite** sur plusieurs colonnes. Par exemple : `CREATE INDEX idx_name ON users (last_name, first_name);` **L'ordre des colonnes est essentiel ici.** Un index sur `(last_name, first_name)` est comme un annuaire trié d'abord par nom de famille, puis par prénom. Il est très rapide pour les requêtes comme : * `WHERE last_name = 'Smith'` * `WHERE last_name = 'Smith' AND first_name = 'John'` Cependant, il ne sera **pas** très utile pour une requête qui filtre uniquement sur la deuxième colonne : * `WHERE first_name = 'John'` Étant donné que l'index n'est pas trié d'abord par `first_name`, la base de données ne peut pas l'utiliser efficacement pour trouver tous les 'John'. Ainsi, lors de la création d'un index composite, placez toujours en premier la colonne sur laquelle vous filtrez le plus fréquemment. J'espère que cela vous donne une base solide. La prochaine étape consiste à examiner vos requêtes lentes, à utiliser un outil comme `EXPLAIN` pour voir leur plan d'exécution et à identifier quelles colonnes dans vos clauses `WHERE` ou `JOIN` seraient de bons candidats pour un index. Faites-moi savoir si vous souhaitez que nous examinions ensemble l'une de vos requêtes.

Resultat

#2

Votes gagnants

0 / 3

Score moyen

81
Modeles evaluateurs OpenAI GPT-5.2

Score total

82

Commentaire global

Explication claire et encourageante avec une solide analogie de manuel et un contraste conceptuel solide entre les scans complets de table et les recherches indexées. Couvre les principaux compromis (ralentissement des écritures, stockage) et donne des exemples pratiques à faire/ne pas faire, ainsi qu'une note correcte sur l'ordre des colonnes d'index composites. Légèrement léger sur les coûts opérationnels moins évidents (maintenance/fragmentation, complexité du planificateur, contention) et certaines affirmations sont un peu trop simplifiées (par exemple, « index beaucoup plus petit » et « 10 ou 15 étapes » sans contexte). Globalement très bon et lisible, mais un peu moins complet sur le plan pratique que B.

Afficher le detail de l evaluation

Clarte

Poids 30%
80

Explique les concepts clairement avec une analogie unique forte et un exemple SQL concret ; de légères simplifications et moins d'explications de renforcement le rendent légèrement moins net que B.

Exactitude

Poids 25%
81

Description générale exacte de l'indexation B-tree, de la sélectivité et du comportement de préfixe d'index composite ; quelques simplifications (taille de l'index, « 10-15 étapes » fixes) pourraient induire en erreur sans mises en garde.

Adequation au public

Poids 20%
85

Ton de mentor bienveillant et évite le jargon lourd, avec juste assez de terminologie introduite et expliquée.

Completude

Poids 15%
78

Aborde les cinq domaines demandés avec une profondeur décente, mais les compromis et le processus de décision pratique sont moins développés et les exemples sont globalement moins nombreux.

Structure

Poids 10%
86

Clairement sectionné pour correspondre à la demande, ce qui facilite la lecture et l'apprentissage.

Modeles evaluateurs Google Gemini 2.5 Flash

Score total

85

Commentaire global

La réponse A fournit une explication très solide et claire de l'indexation de base de données. Elle couvre avec succès tous les points demandés, utilise une bonne analogie et maintient un ton encourageant. La structure avec des titres numérotés la rend facile à suivre. Ses exemples sur quand ajouter et ne pas ajouter d'index sont réalistes et bien expliqués. L'explication de l'ordre des colonnes d'index composites est également précise et utile.

Afficher le detail de l evaluation

Clarte

Poids 30%
90

L'explication est très claire, utilisant une analogie unique et efficace ainsi qu'un langage simple. Les sections numérotées facilitent la lecture.

Exactitude

Poids 25%
85

Les explications techniques, y compris la mécanique des B-trees et les compromis, sont exactes et présentées correctement pour le public.

Adequation au public

Poids 20%
85

Le ton est parfaitement encourageant et accessible, correspondant bien au scénario mentor-développeur junior. Le langage évite le jargon inutile.

Completude

Poids 15%
80

Les cinq points demandés sont couverts de manière adéquate avec un contenu significatif et des exemples réalistes.

Structure

Poids 10%
80

L'utilisation de titres numérotés pour chaque section fournit une structure claire et facile à suivre.

Modeles evaluateurs Anthropic Claude Opus 4.6

Score total

75

Commentaire global

La réponse A est une explication bien structurée, claire et techniquement précise de l'indexation de base de données. Elle couvre les cinq sujets requis avec de bonnes analogies (index de manuel), une explication correcte des arbres B, des compromis clairs, des exemples pratiques et une section solide sur les index composites. Le ton est encourageant et de type mentor. Cependant, elle est quelque peu moins approfondie qu'elle pourrait l'être : la section des compromis ne couvre que deux coûts (ralentissement des écritures et stockage) sans mentionner des problèmes plus subtils comme le verrouillage, la fragmentation ou les index redondants. Les conseils pratiques fournissent exactement deux exemples pour chaque cas, atteignant le minimum mais sans aller au-delà. La section sur les index composites est précise et utilise efficacement l'analogie de l'annuaire téléphonique. Dans l'ensemble, c'est une réponse solide et compétente qui répond à toutes les exigences à un bon niveau.

Afficher le detail de l evaluation

Clarte

Poids 30%
78

La réponse A est claire et bien écrite avec une bonne analogie de manuel et un langage accessible. La progression du concept au détail est logique. Cependant, certaines sections pourraient bénéficier d'une légère élaboration supplémentaire pour approfondir la compréhension.

Exactitude

Poids 25%
75

La réponse A est techniquement précise tout au long. L'explication de l'arbre B est correcte, les compromis sont valides et la section sur les index composites explique correctement la règle du préfixe le plus à gauche. L'affirmation de "10 ou 15 opérations" pour une recherche dans un arbre B sur 2 millions de lignes est raisonnable (logarithme en base ~100 de 2 millions). Aucune erreur détectée.

Adequation au public

Poids 20%
75

La réponse A a un ton amical, de type mentor, approprié pour un développeur junior. Elle utilise "Hey" pour commencer et propose de parcourir les requêtes ensemble à la fin. Le langage évite le jargon inutile. Elle convient bien à l'audience, mais pourrait offrir plus d'échafaudages pour la prise de décision.

Completude

Poids 15%
68

La réponse A couvre les cinq sujets requis avec un contenu significatif. Cependant, la section des compromis ne couvre que deux coûts (surcharge d'écriture et stockage), omettant des problèmes plus subtils. Les conseils pratiques fournissent exactement deux exemples chacun, répondant à l'exigence minimale. La section sur les index composites est adéquate mais brève.

Structure

Poids 10%
75

La réponse A utilise des en-têtes markdown clairs, numérotés pour correspondre aux cinq sujets de la requête, ce qui la rend facile à naviguer. La structure est propre et logique. Les exemples de code sont bien placés. Le paragraphe de clôture offre une belle conclusion avec des prochaines étapes concrètes.

Reponse B: OpenAI GPT-5.4

Si votre table compte deux millions de lignes et qu'une requête semble lente, les index sont l'une des premières choses à considérer. Ce ne sont pas des miracles, mais ils font souvent la différence entre une requête qui vérifie une petite partie des données et une requête qui parcourt tout. Un index de base de données est une structure de données distincte qui aide la base de données à trouver les lignes plus rapidement. La façon la plus simple d'y penser est l'index à la fin d'un manuel. Si vous voulez trouver toutes les pages mentionnant « transactions », vous ne lisez pas tout le livre à partir de la page 1....

Afficher la reponse complete

Si votre table compte deux millions de lignes et qu'une requête semble lente, les index sont l'une des premières choses à considérer. Ce ne sont pas des miracles, mais ils font souvent la différence entre une requête qui vérifie une petite partie des données et une requête qui parcourt tout. Un index de base de données est une structure de données distincte qui aide la base de données à trouver les lignes plus rapidement. La façon la plus simple d'y penser est l'index à la fin d'un manuel. Si vous voulez trouver toutes les pages mentionnant « transactions », vous ne lisez pas tout le livre à partir de la page 1. Vous sautez à l'index, trouvez le mot, et allez directement aux pages pertinentes. Un index de base de données fonctionne de la même manière : au lieu de parcourir toutes les lignes d'une table pour trouver les valeurs correspondantes, la base de données peut utiliser l'index pour se rapprocher des lignes dont elle a besoin. Une autre bonne analogie est un annuaire téléphonique trié par nom de famille. Si vous voulez trouver « Dupont », vous n'inspectez pas chaque personne dans un ordre aléatoire. Parce que les noms sont organisés, vous pouvez rapidement réduire l'endroit où se trouveront les Dupont. Un index donne à la base de données ce type de chemin organisé. Sans index, la base de données peut être amenée à effectuer un balayage complet de la table. Cela signifie lire ligne après ligne, en vérifiant si chacune correspond à votre clause WHERE. Sur une petite table, c'est acceptable. Sur une table de deux millions de lignes, cela peut être coûteux, surtout si les lignes sont volumineuses ou si la requête s'exécute souvent. Un type d'index courant est l'index B-tree. Vous n'avez pas besoin de mémoriser l'algorithme interne, mais l'idée clé est que les valeurs indexées sont stockées dans un ordre trié dans une structure qui permet à la base de données de réduire à plusieurs reprises l'espace de recherche. C'est similaire à la recherche d'un mot dans un dictionnaire : vous ouvrez près du milieu, décidez si votre mot vient avant ou après cette section, puis répétez jusqu'à ce que vous arriviez dans la bonne zone. Vous ne vérifiez pas chaque entrée une par une. Supposons que vous exécutiez souvent cette requête : SELECT * FROM orders WHERE customer_id = 12345; S'il n'y a pas d'index sur customer_id, la base de données peut inspecter les deux millions de lignes, en comparant customer_id dans chaque ligne à 12345. C'est beaucoup de travail. S'il y a un index sur customer_id, la base de données peut utiliser l'index pour aller directement à la partie de la structure où apparaît 12345, puis suivre les pointeurs vers les lignes correspondantes. Au lieu de toucher presque toutes les lignes, elle peut toucher seulement une petite partie de l'index, puis seulement les lignes de table correspondantes. Conceptuellement, c'est le gain de performance : beaucoup moins de données à lire et beaucoup moins de vérifications inutiles. Cela est important car les bases de données sont souvent limitées moins par la puissance brute du CPU et plus par la quantité de données qui doit être lue depuis la mémoire ou le disque. Les balayages complets peuvent forcer la base de données à lire d'énormes quantités de données. Les recherches par index lisent généralement beaucoup moins. Moins de lecture signifie souvent des requêtes plus rapides. Les index sont particulièrement utiles pour les colonnes utilisées dans : - Filtres WHERE - Conditions JOIN - Clauses ORDER BY - GROUP BY dans certains cas - Contraintes d'unicité telles que les clés primaires ou les e-mails uniques Cela dit, les index ne sont pas gratuits. Une erreur très courante chez les débutants est de penser : « Si les index rendent les lectures plus rapides, je devrais tout indexer. » En pratique, trop d'index peuvent nuire à votre système. Le compromis évident est le stockage. Chaque index prend de l'espace disque supplémentaire, parfois beaucoup si la table est grande ou si les colonnes indexées sont larges. Le compromis moins évident est le coût d'écriture. Lorsque vous INSÉREZ une nouvelle ligne, METTEZ À JOUR une colonne indexée, ou SUPPRIMEZ une ligne, la base de données doit mettre à jour non seulement les données de la table, mais aussi chaque index affecté. Si une table a de nombreux index, les écritures deviennent plus lentes car la base de données a plus de structures à maintenir. Il y a aussi des coûts de maintenance et de planification : - Plus d'index signifie plus de travail lors des insertions, mises à jour et suppressions. - Plus d'index peuvent augmenter le verrouillage ou la contention dans les charges de travail intensives en écriture. - Les index doivent être pris en compte par le planificateur de requêtes, ce qui peut ajouter de la complexité. - Certains index deviennent fragmentés ou moins efficaces avec le temps en fonction de la base de données. - Les index redondants peuvent gaspiller de l'espace sans donner de réel bénéfice. Un autre point subtil : un index n'est utile que lorsqu'il aide la base de données à éliminer un grand nombre de lignes. Si votre requête correspond à un pourcentage énorme de la table, la base de données peut choisir de ne pas utiliser l'index du tout. Par exemple, si 90 % des lignes ont status = 'active', un index sur status peut ne pas être très utile pour les requêtes qui recherchent des lignes actives. La base de données peut décider qu'un balayage complet est moins coûteux que d'utiliser l'index, puis de sauter vers presque toutes les lignes de toute façon. Alors, quand devriez-vous ajouter un index ? Une bonne règle empirique est : ajoutez un index lorsqu'une requête est importante, s'exécute souvent, et filtre ou joint des colonnes qui réduisent significativement l'ensemble des résultats. Bons candidats à l'indexation : Exemple 1 : Recherche d'un utilisateur par e-mail Si votre application fait fréquemment : SELECT * FROM users WHERE email = 'a@b.com'; alors indexer l'e-mail est généralement une excellente idée. Les recherches par e-mail sont courantes, et le résultat est généralement une seule ligne. Un index unique est encore mieux si les e-mails doivent être uniques. Exemple 2 : Jointure de grandes tables Si vous joignez souvent des commandes à des clients en utilisant orders.customer_id = customers.id, alors un index sur orders.customer_id est généralement utile. Les colonnes de jointure sur de grandes tables sont des candidats classiques pour l'indexation. Exemple 3 : Filtrage des enregistrements récents Si vous interrogez régulièrement : SELECT * FROM events WHERE created_at >= '2026-01-01'; alors un index sur created_at peut aider, surtout si vous souhaitez généralement une tranche récente relativement petite d'une très grande table. Exemple 4 : Tri avec une limite Les requêtes comme : SELECT * FROM posts WHERE author_id = 42 ORDER BY created_at DESC LIMIT 20; bénéficient souvent de l'indexation des colonnes impliquées dans le filtrage et le tri, potentiellement avec un index composite. Quand ne pas ajouter d'index ? Exemple 1 : Très petites tables Si une table ne contient que quelques centaines de lignes, un balayage complet est souvent déjà peu coûteux. Un index peut ajouter de la complexité sans gain de vitesse significatif. Exemple 2 : Colonnes à très faible sélectivité Faible sélectivité signifie qu'une colonne a très peu de valeurs distinctes, comme is_deleted avec vrai ou faux, ou status avec seulement quelques valeurs courantes. Si la plupart des requêtes correspondent toujours à une grande partie de la table, l'indexation de cette colonne seule peut ne pas aider beaucoup. Exemple 3 : Tables intensives en écriture avec peu de bénéfices en lecture Imaginez une table audit_log qui reçoit des milliers d'insertions par seconde, mais que vous interrogez rarement sauf par clé primaire. L'ajout de plusieurs index supplémentaires « au cas où » peut ralentir considérablement les écritures. Exemple 4 : Colonnes rarement utilisées Si personne n'interroge par middle_name, il y a peu de raisons de l'indexer. Les index doivent servir des modèles de requête réels, pas des modèles hypothétiques. Une façon pratique de décider est de partir des requêtes lentes réelles, pas des suppositions. Regardez les requêtes que votre application exécute le plus souvent, en particulier les plus lentes. Demandez : - Cette table est-elle suffisamment grande pour que son balayage soit coûteux ? - La requête filtre-t-elle sur une colonne qui réduit beaucoup les résultats ? - La requête est-elle exécutée assez fréquemment pour que l'optimisation soit importante ? - Le bénéfice en lecture dépassera-t-il le coût supplémentaire d'écriture et de stockage ? Utilisez également les outils de plan de requête de votre base de données, tels que EXPLAIN. Ceux-ci montrent si la base de données effectue un balayage complet de la table, utilise un index, et approximativement la quantité de travail qu'elle prévoit. Pour un développeur junior, apprendre à lire la sortie EXPLAIN est l'une des étapes les plus précieuses après avoir compris ce que sont les index. Passons maintenant aux index composites. Un index composite est un index sur plusieurs colonnes, tel que : (customer_id, created_at) Ceci est utile lorsque les requêtes filtrent couramment sur plusieurs colonnes ensemble. Par exemple : SELECT * FROM orders WHERE customer_id = 12345 AND created_at >= '2026-01-01'; Un index composite sur (customer_id, created_at) peut être bien meilleur que des index séparés sur une seule colonne, en fonction de la requête et de la base de données. L'ordre des colonnes est très important. Pensez à un index composite comme à un tri de documents d'abord par customer_id, puis au sein de chaque client par created_at. Cela signifie que l'index est naturellement excellent pour les requêtes qui commencent par customer_id. Il peut aider pour : - WHERE customer_id = ... - WHERE customer_id = ... AND created_at >= ... - parfois ORDER BY created_at lorsque customer_id est fixe Mais le même index n'est généralement pas aussi utile pour les requêtes qui filtrent uniquement par created_at, car created_at est la deuxième colonne. La base de données ne peut pas efficacement sauter au milieu en se basant uniquement sur la deuxième partie si la première partie n'est pas contrainte. Donc, si votre modèle de requête courant est : WHERE customer_id = ? AND created_at >= ? alors (customer_id, created_at) est souvent un choix solide. Si votre modèle de requête courant est principalement : WHERE created_at >= ? alors vous pourriez avoir besoin d'un index commençant par created_at à la place. C'est la principale leçon sur les index composites : choisissez l'ordre des colonnes en fonction de la manière dont vos requêtes réelles filtrent et trient, pas en fonction de ce qui semble propre. Pour résumer, voici un modèle mental pratique : - Un index est une structure de raccourci qui aide la base de données à trouver des lignes sans lire toute la table. - Il accélère les lectures en réduisant la quantité de données que la base de données doit examiner. - Il coûte de l'espace supplémentaire et ralentit les écritures car l'index doit être maintenu. - Ajoutez des index pour les requêtes importantes sur de grandes tables où les filtres ou les jointures sont sélectifs et fréquents. - Évitez les index inutiles sur les petites tables, les colonnes à faible sélectivité, ou les tables intensives en écriture avec peu de bénéfices en lecture. - Pour les index composites, l'ordre des colonnes est crucial. Si vous retenez une chose, retenez ceci : les index doivent être guidés par les modèles de requête. Ne demandez pas : « Cette colonne devrait-elle avoir un index ? » isolément. Demandez : « Quelles requêtes exécutons-nous, à quelle fréquence, et combien de lignes doivent-elles toucher ? » Une fois que vous commencerez à penser ainsi, vous serez en mesure de prendre des décisions d'indexation solides en toute confiance.

Resultat

#1 | Gagnant

Votes gagnants

3 / 3

Score moyen

86
Modeles evaluateurs OpenAI GPT-5.2

Score total

87

Commentaire global

Explication approfondie et pédagogique avec des analogies intuitives (index de manuel, annuaire, dictionnaire), une description conceptuellement exacte de la réduction d'une B-tree par rapport à un scan, et une forte emphase sur les E/S comme le véritable goulot d'étranglement. Les compromis sont plus complets, incluant des coûts moins évidents (contention/verrouillage, complexité du planificateur, fragmentation, index redondants). Fournit de multiples exemples réalistes pour quand ajouter et quand ne pas ajouter, ainsi que des conseils pratiques de décision (modèles de requêtes, EXPLAIN). Les index composites et l'ordre des colonnes sont expliqués clairement avec des conseils basés sur les modèles de requêtes. Légèrement plus long que nécessaire, mais reste accessible et bien structuré.

Afficher le detail de l evaluation

Clarte

Poids 30%
86

Utilise de multiples analogies intuitives et revient constamment à l'idée centrale de réduire les données examinées/les E/S ; plus long, mais généralement très clair pour un développeur junior.

Exactitude

Poids 25%
87

Conceptuellement exact sur la réduction des B-trees, la sélectivité, le choix par le planificateur entre scans et index, et l'ordre des index composites ; évite les affirmations trompeuses majeures et donne des déclarations correctes orientées vers les conseils.

Adequation au public

Poids 20%
84

Encourageant et pragmatique, explique des termes comme sélectivité et EXPLAIN dans leur contexte ; légèrement plus dense/long mais toujours approprié pour un utilisateur SQL ayant 6 mois d'expérience.

Completude

Poids 15%
92

Couvre entièrement tous les points demandés avec des détails significatifs : analogies, mécanique de scan vs index, compromis étendus, multiples exemples de ce qu'il faut faire/ne pas faire, et une discussion approfondie sur les index composites/l'ordre.

Structure

Poids 10%
83

Bien organisé avec une progression logique et une conclusion ; moins explicitement mappé aux sections numérotées de la requête, mais toujours facile à suivre avec des titres/paragraphes et des listes.

Modeles evaluateurs Google Gemini 2.5 Flash

Score total

91

Commentaire global

La réponse B est une explication exceptionnelle qui couvre non seulement tous les points requis, mais ajoute également une profondeur et une valeur pratique significatives. Elle utilise plusieurs analogies intuitives, fournit des détails plus complets sur les compromis (y compris les coûts de maintenance et les considérations relatives au planificateur de requêtes) et offre une plus large gamme d'exemples réalistes pour des conseils pratiques. L'inclusion de conseils sur l'utilisation de `EXPLAIN` et un résumé final de « modèle mental » la rendent exceptionnellement utile pour un développeur junior. Le ton est constamment excellent et très proche d'un mentor.

Afficher le detail de l evaluation

Clarte

Poids 30%
95

La clarté est exceptionnelle, améliorée par plusieurs analogies intuitives et un flux bien structuré. Le résumé final du « modèle mental » renforce encore la compréhension.

Exactitude

Poids 25%
90

Techniquement précis, avec une couverture légèrement plus nuancée et complète des compromis (par exemple, maintenance, verrouillage) et de la sélectivité des index, sans surcompliquer.

Adequation au public

Poids 20%
90

Le ton de mentor est exceptionnel. Les conseils pratiques supplémentaires (comme l'utilisation de EXPLAIN) et les exemples complets sont parfaitement adaptés pour aider un développeur junior à renforcer sa confiance et son jugement.

Completude

Poids 15%
90

Les cinq points sont couverts de manière approfondie. La réponse B fournit des compromis plus détaillés, un plus grand nombre d'exemples pratiques et des conseils supplémentaires précieux comme l'utilisation de `EXPLAIN` et un modèle mental récapitulatif, ce qui la rend plus complète.

Structure

Poids 10%
85

La structure est logique et fluide. L'utilisation du gras pour les points clés et l'excellent résumé du « modèle mental » à la fin améliorent considérablement l'organisation générale et l'expérience d'apprentissage.

Modeles evaluateurs Anthropic Claude Opus 4.6

Score total

81

Commentaire global

La réponse B est une explication approfondie, bien organisée et techniquement précise qui va au-delà des exigences. Elle fournit deux analogies (index de manuel et annuaire téléphonique), une explication claire et correcte des arbres B, et une discussion approfondie des compromis qui inclut non seulement les coûts de stockage et d'écriture, mais aussi le verrouillage, la contention, la fragmentation, les index redondants et la complexité du planificateur de requêtes. Elle fournit plus de deux exemples pour savoir quand ajouter et quand ne pas ajouter d'index (quatre chacun), offrant au lecteur un ensemble de scénarios plus riche. La section sur les index composites est détaillée et utilise un exemple concret et réaliste avec une explication claire de l'importance de l'ordre des colonnes. Le ton est accessible et encourageant sans être condescendant. Elle inclut également des cadres de prise de décision pratiques et mentionne EXPLAIN comme prochaine étape. La réponse est plus longue mais pas inutile ; le contenu supplémentaire est substantiel et utile.

Afficher le detail de l evaluation

Clarte

Poids 30%
83

La réponse B est exceptionnellement claire, utilisant deux analogies (manuel et annuaire téléphonique) et fournissant des exemples SQL concrets tout au long. L'explication s'enchaîne naturellement et renforce la compréhension de manière progressive. Le cadre de prise de décision pratique à la fin est un ajout particulièrement clair.

Exactitude

Poids 25%
80

La réponse B est techniquement précise et légèrement plus nuancée. Elle explique correctement les recherches dans les arbres B, mentionne que la base de données peut choisir de ne pas utiliser un index lorsque la sélectivité est faible, discute du verrouillage et de la contention comme coûts d'écriture, et explique avec précision l'ordre des colonnes dans les index composites. Le détail supplémentaire sur le planificateur de requêtes et la fragmentation ajoute de la profondeur à la correction.

Adequation au public

Poids 20%
80

La réponse B maintient un ton accessible et encourageant tout au long, sans être condescendante. Elle dit explicitement au lecteur 'Vous n'avez pas besoin de mémoriser l'algorithme interne', ce qui est rassurant. Le modèle mental pratique résumé à la fin et les questions de prise de décision sont particulièrement bien adaptés à un développeur junior qui développe son jugement. La mention d'EXPLAIN comme prochaine étape est un ajout pratique précieux.

Completude

Poids 15%
82

La réponse B couvre les cinq sujets requis avec une profondeur substantielle. La section sur les compromis est notablement plus complète, couvrant le stockage, les coûts d'écriture, le verrouillage, la contention, la fragmentation, les index redondants et la complexité du planificateur de requêtes. Elle fournit quatre exemples chacun pour savoir quand ajouter et quand ne pas ajouter d'index, dépassant largement le minimum. La section sur les index composites est détaillée avec plusieurs exemples de modèles de requêtes.

Structure

Poids 10%
78

La réponse B utilise une structure fluide sans en-têtes numérotés mais maintient une progression thématique claire. Bien qu'elle manque d'en-têtes de section explicites pour chacun des cinq sujets, le contenu est bien organisé avec des transitions claires. Le modèle mental résumé à la fin est un choix structurel efficace. L'absence d'en-têtes est une faiblesse mineure par rapport à la structure explicite de la réponse A, mais l'organisation du contenu compense.

Resume comparatif

Pour chaque tache et discussion, le classement final est determine par agregation des rangs par evaluateur (rang moyen + departage Borda). Le score moyen est affiche a titre indicatif.

Evaluateurs: 3

Votes gagnants

0 / 3

Score moyen

81
Voir cette reponse

Votes gagnants

3 / 3

Score moyen

86
Voir cette reponse

Resultats de l evaluation

Modeles evaluateurs Anthropic Claude Opus 4.6

Raison du gagnant

La réponse B l'emporte car elle est plus complète dans toutes les dimensions. Elle fournit plus d'analogies, une couverture plus détaillée des compromis (y compris des coûts subtils comme le verrouillage, la fragmentation et les index redondants), plus d'exemples pratiques (quatre chacun pour quand ajouter et quand ne pas ajouter), et une explication plus détaillée des index composites avec des modèles de requêtes réalistes. Les deux réponses sont techniquement exactes et bien formulées, mais la réponse B donne au développeur junior beaucoup plus de matière pour développer un jugement réel, ce qui est l'objectif principal de la tâche. Le cadre de prise de décision pratique de la réponse B et l'accent mis sur la réflexion axée sur les modèles de requêtes ajoutent une valeur significative par rapport à ce que fournit la réponse A.

Modeles evaluateurs Google Gemini 2.5 Flash

Raison du gagnant

La réponse B l'emporte car elle est plus complète et offre une plus grande utilité pratique pour le public cible. Bien que la réponse A soit très bonne et couvre toutes les exigences, la réponse B va plus loin en détaillant des compromis plus subtils, en offrant des exemples plus variés et réalistes, et en incluant des conseils pratiques comme l'utilisation de `EXPLAIN` et un résumé final de « modèle mental ». Ces ajouts rendent la réponse B plus efficace pour donner à un développeur junior la confiance et la compréhension nécessaires pour prendre des décisions d'indexation.

Modeles evaluateurs OpenAI GPT-5.2

Raison du gagnant

La réponse B est plus complète et pratiquement utile tout en restant précise et accessible. Elle couvre tous les sujets demandés avec une meilleure conscience des compromis, des exemples réalistes plus variés et des conseils plus clairs sur l'utilisation des plans de requête et des modèles de requête pour décider de l'indexation. La réponse A est solide et claire, mais B offre une explication plus équilibrée de type mentor et une meilleure couverture des coûts non évidents et de la prise de décision dans le monde réel.

X f L