Orivel Orivel
Ouvrir le menu

Enseigner les index de base de données à un développeur backend junior

Comparez les réponses des modèles pour cette tâche de benchmark en Explication et consultez scores, commentaires et exemples liés.

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

X f L

Sommaire

Vue d’ensemble de la tâche

Genres de comparaison

Explication

Modèle créateur de la tâche

Modèles participants

Modèles évaluateurs

Consigne de la tâche

Rédigez une explication pédagogique destinée à un développeur backend junior qui connaît la syntaxe SQL de base SELECT, WHERE et JOIN mais qui n'a jamais conçu intentionnellement d'index de base de données. Expliquez ce qu'est un index de base de données, comment il peut accélérer les lectures, pourquoi il peut ralentir les écritures et utiliser de l'espace de stockage supplémentaire, et comment un index B-tree courant est utilisé à un niveau élevé. Incluez une explication pratique de la sélectivité, des index comp...

Afficher plus

Rédigez une explication pédagogique destinée à un développeur backend junior qui connaît la syntaxe SQL de base SELECT, WHERE et JOIN mais qui n'a jamais conçu intentionnellement d'index de base de données. Expliquez ce qu'est un index de base de données, comment il peut accélérer les lectures, pourquoi il peut ralentir les écritures et utiliser de l'espace de stockage supplémentaire, et comment un index B-tree courant est utilisé à un niveau élevé. Incluez une explication pratique de la sélectivité, des index composites, de l'idée du préfixe le plus à gauche (leftmost-prefix), et des situations où un index peut ne pas aider. Utilisez une analogie simple, mais expliquez aussi directement le comportement réel de la base de données. Incluez deux petits exemples SQL montrant un choix d'index utile et un choix d'index moins utile ou problématique. Terminez par une courte liste de contrôle pratique que le développeur pourrait utiliser pour décider s'il faut ajouter un index.

Informations complémentaires

Supposez une base de données relationnelle générique telle que PostgreSQL, MySQL ou SQLite. Évitez de vous appuyer sur une syntaxe spécifique à un fournisseur ou sur des détails internes avancés de la base de données, au-delà de ce qui est nécessaire pour une compréhension pratique.

Politique d’évaluation

Une bonne réponse doit être précise, claire et bien adaptée à un développeur backend junior. Elle doit expliquer les index comme des structures de données séparées qui aident la base de données à trouver des lignes sans tout parcourir, décrire les compromis entre lectures et écritures, et couvrir correctement le comportement des B-tree à un niveau élevé sans compliquer excessivement. Elle doit rendre la sélectivité, les index composites et l'idée du préfixe le plus à gauche compréhensibles au travers d'exemples pra...

Afficher plus

Une bonne réponse doit être précise, claire et bien adaptée à un développeur backend junior. Elle doit expliquer les index comme des structures de données séparées qui aident la base de données à trouver des lignes sans tout parcourir, décrire les compromis entre lectures et écritures, et couvrir correctement le comportement des B-tree à un niveau élevé sans compliquer excessivement. Elle doit rendre la sélectivité, les index composites et l'idée du préfixe le plus à gauche compréhensibles au travers d'exemples pratiques. Les exemples SQL doivent être petits, cohérents et pertinents, et la réponse doit éviter des règles trompeuses telles que l'indexation systématique de chaque colonne ou la supposition qu'un index sera toujours utilisé. La checklist finale doit être exploitable et relier les décisions d'indexation aux vrais schémas de requêtes, à la distribution des données et aux coûts de maintenance.

Réponses

Comprendre les index de base de données : un guide pratique

Ce qu’est un index

Un index de base de données est une structure de données séparée que la base maintient en parallèle d’une table. Il stocke les valeurs d’une ou plusieurs colonnes sous une forme triée et interrogeable, avec des pointeurs vers les lignes réelles. La table elle‑même stocke vos données ; l’index est une structure supplémentaire dont le seul rôle est d’aider la base à trouver les lignes plus rapidement.

Voici une analogie, et c’est la seule dont vous avez besoin : un index ressemble à l’index à la fin d’un manuel. Si vous voulez toutes...

Afficher la réponse complète

Comprendre les index de base de données : un guide pratique

Ce qu’est un index

Un index de base de données est une structure de données séparée que la base maintient en parallèle d’une table. Il stocke les valeurs d’une ou plusieurs colonnes sous une forme triée et interrogeable, avec des pointeurs vers les lignes réelles. La table elle‑même stocke vos données ; l’index est une structure supplémentaire dont le seul rôle est d’aider la base à trouver les lignes plus rapidement.

Voici une analogie, et c’est la seule dont vous avez besoin : un index ressemble à l’index à la fin d’un manuel. Si vous voulez toutes les pages qui mentionnent « transactions », vous ne lisez pas tout le livre page par page ; vous recherchez « transactions » dans l’index trié par ordre alphabétique, obtenez une courte liste de numéros de page et allez directement à celles‑ci. Sans cet index, votre seule option est de parcourir chaque page. Une base de données est face exactement au même choix : utiliser un index pour sauter aux lignes correspondantes, ou scanner la table entière.

Maintenant le comportement réel, sans l’analogie. Lorsque vous exécutez une requête comme SELECT * FROM orders WHERE customer_id = 42, la base a deux stratégies de base. Un parcours complet de la table lit chaque ligne et vérifie la condition, ce qui coûte un temps proportionnel à la taille de la table. Une recherche via l’index parcourt plutôt la structure d’index triée pour customer_id = 42, trouve rapidement les entrées correspondantes et suit les pointeurs enregistrés pour récupérer seulement ces lignes. Pour une table volumineuse où seules quelques lignes correspondent, la voie de l’index peut être des milliers de fois moins coûteuse.

Comment fonctionne un index B‑tree, de façon générale

Le type d’index le plus courant est un B‑tree. C’est une structure d’arbre équilibré où les clés sont conservées en ordre trié. Le nœud supérieur divise l’espace des clés en plages, chaque nœud enfant subdivise davantage, et le niveau inférieur (les feuilles) contient les valeurs indexées réelles avec des pointeurs vers les lignes de la table. Parce que l’arbre est équilibré et que chaque nœud contient de nombreuses clés, même une table de centaines de millions de lignes nécessite généralement seulement trois à cinq lectures de nœuds pour trouver une valeur spécifique.

Parce qu’un B‑tree conserve les valeurs en ordre trié, il prend en charge plus que des correspondances exactes. Il gère efficacement les conditions de plage (WHERE created_at >= '2024-01-01'), les correspondances de préfixe sur les chaînes (WHERE email LIKE 'anna%'), et peut renvoyer des lignes déjà triées, ce qui permet à la base d’éviter une étape de tri séparée pour les clauses ORDER BY correspondantes.

Pourquoi les index ont un coût

Les index ne sont pas gratuits, et c’est le compromis que vous devez intégrer.

Les écritures ralentissent. Chaque INSERT doit ajouter une entrée à chaque index sur la table. Chaque DELETE doit supprimer des entrées. Chaque UPDATE qui modifie une colonne indexée doit mettre à jour les entrées d’index correspondantes. Une table avec six index effectue effectivement jusqu’à sept écritures pour chaque insertion logique de ligne. Sur des tables à fort volume d’écritures, un indexage négligent nuit de manière mesurable au débit.

Le stockage augmente. Chaque index est une copie complète des valeurs de colonne indexées plus des pointeurs et la structure de l’arbre. Les index sur de grandes tables peuvent rivaliser avec la taille de la table elle‑même ou la dépasser, ce qui affecte aussi les sauvegardes et la mise en cache en mémoire.

Donc le principe directeur est : les index échangent un coût d’écriture et d’espace de stockage contre la vitesse de lecture. Vous les ajoutez là où les lectures en bénéficient clairement, pas partout.

Sélectivité : le concept clé pour décider de la valeur

La sélectivité décrit dans quelle mesure une condition réduit le nombre de lignes. Une colonne hautement sélective a beaucoup de valeurs distinctes par rapport au nombre de lignes. Un email ou un identifiant de commande est très sélectif : filtrer dessus renvoie une ou quelques lignes sur des millions, et un index est très utile. Une colonne comme status avec trois valeurs ('pending', 'shipped', 'cancelled') ou un drapeau booléen is_active a une faible sélectivité : le filtrage peut toujours correspondre à 40 % de la table.

Pourquoi cela importe‑t‑il ? Si une condition correspond à une grande fraction de la table, aller et venir entre l’index et la table pour des millions de lignes est souvent plus lent que de simplement scanner la table séquentiellement. Les planificateurs de requêtes le savent et ignoreront un index lorsque la fraction estimée de correspondance est trop élevée. À titre d’intuition approximative, si une requête typique utilisant l’index renverrait plus que quelques pourcents des lignes, l’index peut ne pas être utilisé du tout, et il constitue alors un surcoût pur.

Index composites et règle du préfixe le plus à gauche

Un index peut couvrir plusieurs colonnes, dans un ordre spécifique. Par exemple :

CREATE INDEX idx_orders_customer_date ON orders (customer_id, created_at);

Considérez cela comme triant les entrées d’abord par customer_id, puis par created_at au sein de chaque client, comme un annuaire téléphonique trié par nom de famille, puis par prénom.

L’idée du préfixe le plus à gauche découle directement de cet ordre de tri. Cet index peut servir efficacement :

  • WHERE customer_id = 42
  • WHERE customer_id = 42 AND created_at >= '2024-01-01'

Mais il ne peut pas servir efficacement WHERE created_at >= '2024-01-01' seul, parce que les entrées pour une plage de dates donnée sont réparties entre tous les clients ; vous ne pouvez pas utiliser un annuaire trié par nom de famille pour trouver toutes les personnes prénommées « Anna ». L’index est utilisable seulement lorsque vos conditions contraignent un préfixe de sa liste de colonnes, en commençant par la colonne la plus à gauche. Cela signifie que (customer_id, created_at) et (created_at, customer_id) sont des index différents servant des requêtes différentes, et l’ordre des colonnes doit suivre vos modèles de requêtes les plus importants. Une règle empirique commune : mettez d’abord les colonnes filtrées par égalité, puis la colonne de plage ou de tri.

Quand un index n’aide pas

  • Faible sélectivité : filtrer WHERE is_active = true sur une table où 90 % des lignes sont actives. Le planificateur fera un scan à la place.
  • Fonctions ou expressions sur la colonne : WHERE LOWER(email) = 'x@y.com' ne peut pas utiliser un index simple sur email, parce que l’index stocke les valeurs brutes, pas les valeurs transformées. (Certaines bases de données prennent en charge des index d’expression, mais l’index simple ne sera pas utilisé.)
  • Wildcards en tête : WHERE name LIKE '%son' ne peut pas utiliser un B‑tree, car l’ordre trié n’aide que lorsque le préfixe est connu.
  • Sauter la colonne la plus à gauche d’un index composite, comme décrit ci‑dessus.
  • Tables minuscules : pour quelques centaines de lignes, un scan est déjà rapide ; l’index ajoute un coût d’écriture sans bénéfice.
  • Incompatibilités de type ou conversions implicites sur la colonne indexée peuvent aussi empêcher l’utilisation de l’index.

Deux petits exemples

Un index utile. Supposons que votre application exécute constamment :

SELECT id, total, created_at
FROM orders
WHERE customer_id = 42
ORDER BY created_at DESC
LIMIT 20;

Alors cet index convient parfaitement :

CREATE INDEX idx_orders_customer_date ON orders (customer_id, created_at);

La base saute aux entrées du client 42, qui sont déjà triées par created_at, lit les 20 plus récentes, et s’arrête. C’est rapide sur une table de n’importe quelle taille, et il sert aussi les recherches simples par customer_id grâce au préfixe le plus à gauche.

Un index problématique. Supposons que vous créiez plutôt :

CREATE INDEX idx_orders_status ON orders (status);

où status a trois valeurs possibles et la plupart des lignes sont 'shipped'. Une requête comme SELECT * FROM orders WHERE status = 'shipped' correspond à la majeure partie de la table, donc le planificateur fera de toute façon un scan de la table. L’index est rarement ou jamais utilisé, pourtant chaque insert et chaque mise à jour du status paie pour le maintenir. C’est une perte nette. (Une exception à connaître : indexer une colonne de faible cardinalité peut être rentable quand une valeur est rare et fortement interrogée, comme le petit ensemble de commandes 'pending', mais la version générique ci‑dessus est une erreur classique.)

Checklist pratique avant d’ajouter un index

  1. Identifiez d’abord la requête réellement lente ; n’indexez pas de manière spéculative. Regardez les vrais modèles de requêtes et utilisez EXPLAIN pour voir le plan actuel.
  2. Vérifiez la sélectivité : les requêtes typiques utilisant cet index renverront‑elles une petite fraction de la table ? Sinon, reconsidérez.
  3. Pour les filtres et tris sur plusieurs colonnes, concevez un index composite unique avec le bon ordre de colonnes (colonnes d’égalité en premier, puis colonnes de plage/tri) plutôt que plusieurs index mono‑colonne.
  4. Confirmez la règle du préfixe le plus à gauche : votre requête la plus courante contraint‑elle la première colonne de l’index ?
  5. Assurez‑vous que la requête ne neutralise pas l’index avec des fonctions, des wildcards en tête, ou des conversions de type sur la colonne indexée.
  6. Pesez le trafic d’écriture : sur des tables fortement écrites, chaque index supplémentaire a un coût réel. Supprimez les index qui se chevauchent ou qui sont des préfixes d’autres.
  7. Vérifiez si un index existant couvre déjà la requête avant d’en créer un nouveau.
  8. Après avoir créé l’index, vérifiez avec EXPLAIN que le planificateur l’utilise réellement, et mesurez le temps de la requête avant et après.
  9. Passez en revue périodiquement et supprimez les index inutilisés ; ils coûtent en écritures et en stockage pour toujours.

Le modèle mental essentiel à conserver : un index est une structure de recherche triée que vous payez à chaque écriture pour que des lectures spécifiques et sélectives deviennent bon marché. Ajoutez‑en un lorsque vous pouvez nommer la requête qu’il sert et démontrer qu’il aide.

Résultat

#1 | Gagnant

Votes gagnants

3 / 3

Score moyen

90
Modèles évaluateurs Anthropic Claude Opus 4.8

Score total

89

Commentaire global

La réponse A est complète, précise et exceptionnellement bien adaptée au public cible. Elle sépare clairement l'analogie du comportement réel de la base de données (comme demandé explicitement par l'énoncé), explique la structure B-tree avec des détails concrets sur les lectures de nœuds, et couvre les coûts d'écriture, le stockage et la sélectivité avec une nuance correcte, y compris le cas où l'indexation d'une valeur rare à faible cardinalité peut quand même être bénéfique. Elle aborde pleinement les index composites et la règle du préfixe le plus à gauche avec une excellente illustration de l'annuaire téléphonique, et inclut une section riche sur « quand un index n'aide pas » (fonctions, jokers en tête, transtypages, petites tables). Les deux exemples SQL sont cohérents et directement liés aux modèles de requêtes, et la liste de contrôle est très exploitable, faisant référence à EXPLAIN, à la mesure et à la suppression des index inutilisés. Faiblesse mineure : elle est plus longue et plus dense que strictement nécessaire, mais cela nuit rarement à la compréhension étant donné la structure solide.

Afficher le détail de l’évaluation

Clarté

Poids 30%
90

Les explications sont précises et s'enchaînent logiquement ; la séparation délibérée de l'analogie du comportement réel, l'illustration de l'annuaire téléphonique pour l'ordre des colonnes et le modèle mental final rendent les concepts abstraits vivants. Légèrement plus dense que B mais jamais confuse.

Exactitude

Poids 25%
90

Techniquement précise tout au long, y compris sur des points subtils : les planificateurs ignorant les index de faible sélectivité, les index d'expression comme exception, l'échec des jokers en tête, les problèmes de transtypage, et la note correcte qu'une valeur rare à faible cardinalité fréquemment interrogée peut quand même être bénéfique. L'estimation de la lecture des nœuds B-tree est raisonnable.

Adéquation au public

Poids 20%
90

Bien adaptée à un développeur junior connaissant SELECT/WHERE/JOIN : elle évite les détails internes profonds, nomme les règles pratiques et lie chaque concept à une décision que le développeur peut prendre. La densité est le seul risque mineur pour un novice.

Complétude

Poids 15%
90

Couvre tous les éléments demandés et plus encore : structure de l'index, accélération des lectures, coût d'écriture/stockage, B-tree de haut niveau, sélectivité, index composites, préfixe le plus à gauche, plusieurs cas où l'index n'aide pas, deux exemples SQL contrastés, et une liste de contrôle riche incluant EXPLAIN et la suppression des index inutilisés.

Structure

Poids 10%
80

Flux logique et bien sectionné, de la définition aux compromis, en passant par la sélectivité, les index composites, les cas où l'index n'aide pas, les exemples et la liste de contrôle. Des blocs de texte légèrement plus denses réduisent la lisibilité par rapport à B.

Modèles évaluateurs Google Gemini 2.5 Flash

Score total

92

Commentaire global

La réponse A fournit une explication exceptionnellement claire, complète et pratique des index de base de données, parfaitement adaptée à un développeur backend junior. Elle couvre tous les sujets requis avec une excellente profondeur, y compris une section robuste sur les situations où les index n'aident pas et une liste de contrôle très exploitable. Les analogies et les explications directes sont bien intégrées, et les exemples SQL sont pertinents.

Afficher le détail de l’évaluation

Clarté

Poids 30%
90

La réponse A est exceptionnellement claire, utilisant des titres bien structurés, un langage précis et des analogies efficaces (comme l'annuaire pour le préfixe gauche) pour expliquer des concepts complexes. Le flux est logique et facile à suivre.

Exactitude

Poids 25%
95

La réponse A est très précise dans toutes ses explications, de la mécanique des B-trees aux nuances de sélectivité et des index composites. Elle identifie correctement divers scénarios où les index sont bénéfiques ou préjudiciables, y compris le support des requêtes de plage et des clauses ORDER BY avec des B-trees.

Adéquation au public

Poids 20%
90

La réponse A est parfaitement adaptée à un développeur backend junior. Le langage est accessible, l'analogie est simple et efficace, et les conseils pratiques sont complets sans être écrasants. Le 'modèle mental de base' à la fin est un excellent résumé pour le public cible.

Complétude

Poids 15%
95

La réponse A est très complète, couvrant tous les sujets demandés en profondeur. Elle fournit une liste très complète des situations où un index peut ne pas aider et une liste de contrôle détaillée et exploitable, dépassant les attentes en matière de conseils pratiques.

Structure

Poids 10%
90

La réponse A a une excellente structure avec des titres clairs et descriptifs qui guident le lecteur à travers le matériel de manière logique. Chaque concept est introduit et expliqué de manière bien organisée, rendant le contenu facile à assimiler.

Modèles évaluateurs OpenAI GPT-5.5

Score total

89

Commentaire global

La réponse A est une explication pédagogique très complète, précise et bien structurée. Elle explique clairement les index comme des structures de recherche triées séparées, couvre le comportement des arbres B, les compromis lecture/écriture/stockage, la sélectivité, les index composites, le comportement du préfixe le plus à gauche, et de nombreuses situations où les index peuvent ne pas aider. Ses exemples sont pratiques et sa liste de contrôle finale est directement exploitable. Les faiblesses mineures sont quelques simplifications générales, comme l'implication générique du comportement des LIKE-préfixes des arbres B et l'affirmation que l'index d'exemple est rapide sur une table de toute taille, mais cela n'altère pas matériellement l'explication.

Afficher le détail de l’évaluation

Clarté

Poids 30%
88

La réponse A est très claire, avec des explications directes, des exemples concrets et des transitions fluides de l'analogie au comportement réel de la base de données. Elle est quelque peu longue, mais le détail améliore généralement la compréhension plutôt que de l'obscurcir.

Exactitude

Poids 25%
90

La réponse A est techniquement exacte pour une base de données relationnelle générique au niveau visé. Elle explique correctement les structures d'index séparées, la recherche par arbre B, les compromis lecture/écriture/stockage, la sélectivité, l'ordre des index composites et les cas d'utilisation courants où ils ne sont pas utiles, avec seulement de légères simplifications générales.

Adéquation au public

Poids 20%
87

La réponse A est bien adaptée à un développeur backend junior qui connaît les bases du SQL. Elle fournit des modèles mentaux pratiques, des exemples réalistes et des conseils exploitables, bien que sa largeur puisse être un peu dense pour une première introduction.

Complétude

Poids 15%
93

La réponse A couvre presque tous les éléments demandés : ce que sont les index, l'accélération des lectures, les coûts d'écriture et de stockage, le comportement des arbres B, la sélectivité, les index composites, le comportement du préfixe le plus à gauche, plusieurs cas où les index peuvent ne pas aider, deux exemples SQL et une liste de contrôle solide.

Structure

Poids 10%
90

La réponse A est très bien organisée, avec des titres clairs, une progression logique, des exemples placés après les concepts et une liste de contrôle pratique à la fin. La structure soutient fortement l'apprentissage.

Parlons des index de bases de données. Vous avez écrit des requêtes SQL qui fonctionnent probablement très bien sur votre machine de développement avec quelques centaines de lignes. Mais lorsqu'une table atteint des millions de lignes, certaines de ces requêtes peuvent devenir incroyablement lentes. Un index est l'outil le plus courant que nous utilisons pour résoudre ce problème.

Qu'est-ce qu'un index de base de données ? Une analogie

Pensez à un index comme à l'index à la fin d'un manuel. Si vous voulez trouver toutes les pages qui mentionnent "Arbres B", vous ne lisez pas le livre entier de couverture en...

Afficher la réponse complète

Parlons des index de bases de données. Vous avez écrit des requêtes SQL qui fonctionnent probablement très bien sur votre machine de développement avec quelques centaines de lignes. Mais lorsqu'une table atteint des millions de lignes, certaines de ces requêtes peuvent devenir incroyablement lentes. Un index est l'outil le plus courant que nous utilisons pour résoudre ce problème.

Qu'est-ce qu'un index de base de données ? Une analogie

Pensez à un index comme à l'index à la fin d'un manuel. Si vous voulez trouver toutes les pages qui mentionnent "Arbres B", vous ne lisez pas le livre entier de couverture en couverture. Au lieu de cela, vous allez à l'index, trouvez l'entrée pour "Arbres B", et voyez une liste triée de numéros de page (par exemple, 112, 254, 256). C'est beaucoup plus rapide.

Un index de base de données fonctionne de la même manière. C'est une structure de données distincte que la base de données maintient. Elle contient une copie des données d'une ou plusieurs colonnes dans un ordre trié, ainsi qu'un pointeur vers la ligne d'origine dans la table. Lorsque vous interrogez des données dans cette colonne, la base de données peut utiliser cet index trié pour trouver rapidement les pointeurs vers les lignes dont vous avez besoin, au lieu de parcourir toute la table ligne par ligne (un "scan complet de table").

Comment ça marche : L'arbre B

La plupart des bases de données relationnelles utilisent un arbre B pour leurs index standard. Vous n'avez pas besoin de connaître les détails informatiques approfondis, mais à un niveau élevé, un arbre B est une structure d'arbre auto-équilibrée. Imaginez une hiérarchie ramifiée. Pour trouver une valeur, la base de données commence au nœud racine et suit un chemin descendant à travers les branches. Chaque étape réduit considérablement la recherche. Cela permet à la base de données de trouver n'importe quelle valeur dans un ensemble de données massif en très peu d'étapes, rendant les recherches incroyablement efficaces (complexité temporelle logarithmique, ou O(log n)) par rapport à un scan complet de table (complexité temporelle linéaire, ou O(n)).

Les compromis : Vitesse d'écriture et stockage

Les index ne sont pas gratuits. Ils entraînent deux coûts principaux :

  1. Stockage : Un index est une structure de données physique stockée sur disque. Il duplique les données de votre table, il consomme donc de l'espace de stockage supplémentaire.
  2. Écritures plus lentes : C'est le compromis le plus important. Lorsque vous INSERT, UPDATE ou DELETE une ligne, la base de données ne se contente pas de modifier la table. Elle doit également mettre à jour chaque index contenant les colonnes affectées pour le maintenir synchronisé et trié. Si vous avez une table avec cinq index, une instruction INSERT entraîne en fait six écritures : une pour la table et une pour chaque index. Cela peut considérablement ralentir les applications dont les écritures sont intensives.

Concepts clés pour l'indexation pratique

1. Sélectivité
La sélectivité fait référence au nombre de valeurs uniques dans une colonne par rapport au nombre total de lignes.

  • Haute sélectivité : Une colonne où la plupart des valeurs sont uniques, comme user_id ou email_address. Les index sur ces colonnes sont très efficaces car ils peuvent réduire une recherche à une seule ou à quelques lignes très rapidement.
  • Basse sélectivité : Une colonne avec très peu de valeurs uniques, comme un indicateur booléen is_active (vrai/faux) ou une colonne status ('en attente', 'actif', 'inactif'). Un index sur une colonne à faible sélectivité est souvent inutile. Si vous recherchez tous les utilisateurs actifs, cela peut représenter 80 % de votre table. Il est plus rapide pour la base de données de lire toute la table que de faire des allers-retours entre un index et les données de la table.

2. Index composites et règle du préfixe le plus à gauche
Un index composite est un index sur deux colonnes ou plus, comme CREATE INDEX idx_name ON users (last_name, first_name);.

L'ordre des colonnes est critique. C'est la règle du préfixe le plus à gauche. Un index sur (A, B, C) peut être utilisé par la base de données pour accélérer les requêtes qui filtrent sur :

  • A
  • A et B
  • A, B et C

Cependant, il ne peut pas être utilisé pour les requêtes qui filtrent uniquement sur B, C ou B et C. La base de données a besoin des premières colonnes de la définition de l'index pour commencer sa recherche.

Exemples SQL

Supposons une table products avec des millions de lignes.

Bon exemple d'index :
De nombreux utilisateurs recherchent des produits par un code produit unique.

-- La requête
SELECT name, price FROM products WHERE product_code = 'ABC-12345';

-- La solution : Un index sur une colonne à haute sélectivité
CREATE INDEX idx_products_product_code ON products (product_code);

Cet index est très efficace car product_code est unique (haute sélectivité), et l'index permet à la base de données de trouver la ligne de produit exacte presque instantanément.

Exemple d'index moins utile :
Nous voulons trouver tous les produits actuellement disponibles à la vente.

-- La requête
SELECT * FROM products WHERE is_available = TRUE;

-- L'index problématique
CREATE INDEX idx_products_is_available ON products (is_available);

Cet index n'est pas très utile. La colonne is_available a une faible sélectivité (seulement deux valeurs : vrai et faux). Si 90 % des produits sont disponibles, la base de données ignorera probablement cet index et effectuera un scan complet de la table, car c'est plus efficace.

Liste de contrôle : Quand ajouter un index

Avant d'ajouter un index, posez-vous ces questions :

  1. La table est-elle grande ? (Les index sur de petites tables ont peu ou pas d'avantages).
  2. Une requête spécifique est-elle lente ? (N'ajoutez pas d'index aveuglément ; ajoutez-les pour résoudre un problème de performance connu).
  3. Filtre-je fréquemment sur cette colonne dans une clause WHERE ou l'utilise-je dans un JOIN ? (Ce sont les principaux candidats à l'indexation).
  4. La colonne a-t-elle une haute sélectivité ? (L'index réduira-t-il significativement le nombre de lignes à vérifier ?).
  5. Pour un index composite, ma requête utilise-t-elle la ou les premières colonnes de l'index ?
  6. S'agit-il d'une table à forte lecture ? (Si la table a des écritures très fréquentes mais peu de lectures, le coût de maintenance de l'index pourrait l'emporter sur les avantages en lecture).

Résultat

#2

Votes gagnants

0 / 3

Score moyen

81
Modèles évaluateurs Anthropic Claude Opus 4.8

Score total

78

Commentaire global

La réponse B est claire, bien organisée et adaptée à un développeur junior. Elle utilise l'analogie du manuel, explique le comportement des B-trees à un niveau élevé avec la notation Big-O et couvre avec précision les compromis lecture/écriture/stockage. La sélectivité, les index composites et la règle du préfixe le plus à gauche sont expliqués correctement et de manière concise. Les deux exemples SQL sont clairs et pertinents. Cependant, elle est nettement moins complète : l'exigence « quand un index peut ne pas aider » n'est que partiellement couverte (principalement la faible sélectivité), omettant les fonctions/expressions, les jokers de début, les conversions de type et le cas de la colonne de gauche ignorée. Elle ne sépare pas non plus clairement l'analogie du comportement direct de la base de données comme demandé explicitement, et la liste de contrôle, bien que solide, est moins exploitable (aucune mention d'EXPLAIN, de mesure ou de maintenance/suppression d'index inutilisés).

Afficher le détail de l’évaluation

Clarté

Poids 30%
80

Très lisible et propre avec de bons titres et une formulation simple. Le cadre Big-O est une belle touche. Légèrement moins illustratif sur l'ordre des index composites (pas d'intuition concrète sur le tri), et l'analogie et le comportement réel sont quelque peu mélangés plutôt que clairement distingués.

Exactitude

Poids 25%
80

Précis sur tous les points essentiels : recherche logarithmique B-tree, calcul de l'amplification d'écriture, sélectivité et préfixe le plus à gauche. Aucune erreur, mais elle omet plusieurs mises en garde correctes (fonctions, jokers, conversions) et donne une image légèrement moins complète des cas où les index échouent.

Adéquation au public

Poids 20%
80

Excellent : ton amical, commence par se rapporter à l'expérience du lecteur avec les requêtes lentes à grande échelle, et maintient le jargon au minimum avec une brève explication du Big-O. Très accessible, bien qu'avec un peu moins de profondeur pour un développeur souhaitant agir sur les cas limites.

Complétude

Poids 15%
60

Couvre la plupart des éléments requis mais est plus mince sur les « situations où un index peut ne pas aider », se limitant effectivement à la faible sélectivité tout en omettant les fonctions/expressions, les jokers de début, les conversions et les cas de préfixe ignoré. Elle ne contraste pas non plus explicitement l'analogie avec le comportement direct comme demandé.

Structure

Poids 10%
90

Structure propre et scannable avec des titres clairs, des listes numérotées et des blocs de code bien formatés. L'organisation est serrée et facile à naviguer, marginalement mieux présentée que A.

Modèles évaluateurs Google Gemini 2.5 Flash

Score total

85

Commentaire global

La réponse B offre une très bonne explication des index de base de données, avec une introduction solide et des explications claires et concises des concepts fondamentaux. Elle utilise une bonne analogie et fournit des exemples SQL pertinents. Cependant, elle est moins complète que la réponse A, notamment dans sa couverture des situations où un index peut ne pas aider et sa liste de contrôle finale est moins détaillée.

Afficher le détail de l’évaluation

Clarté

Poids 30%
85

La réponse B est très claire et concise, avec une bonne utilisation des titres et des puces. Les explications sont généralement faciles à comprendre, bien que la mention de la « complexité temporelle logarithmique » puisse être légèrement avancée pour un développeur junior, même avec une explication rapide.

Exactitude

Poids 25%
90

La réponse B est correcte dans toutes ses explications des concepts fondamentaux. La description de l'arbre B, les compromis, la sélectivité et la règle du préfixe le plus à gauche sont tous présentés avec précision. Aucune erreur factuelle n'a été identifiée.

Adéquation au public

Poids 20%
88

La réponse B est également bien adaptée au public cible, avec une introduction relatable et des explications simples. Le langage est simple et direct, ce qui permet à un développeur junior de saisir facilement les concepts.

Complétude

Poids 15%
75

La réponse B couvre la plupart des sujets demandés mais est moins complète que la réponse A. Sa section sur les « situations où un index peut ne pas aider » est moins exhaustive, manquant des points clés tels que les fonctions sur les colonnes ou les jokers de début. La liste de contrôle finale est également plus courte et moins détaillée.

Structure

Poids 10%
85

La réponse B est bien structurée avec des titres clairs et une utilisation efficace des puces. Les informations s'enchaînent logiquement, ce qui rend la lecture et la compréhension des différentes sections faciles.

Modèles évaluateurs OpenAI GPT-5.5

Score total

79

Commentaire global

La réponse B est claire, accessible et globalement correcte pour un développeur junior. Elle explique le concept principal, l'analogie du manuel, la recherche d'arbres B à un niveau élevé, les coûts d'écriture/stockage, la sélectivité, les index composites et le comportement du préfixe le plus à gauche. Cependant, elle est moins complète que la réponse A : elle présente moins de cas où les index peuvent ne pas aider, n'aborde pas les fonctions, les jokers de tête, le comportement des plages/tri, les choix du planificateur en détail, ni comment vérifier avec EXPLAIN, et sa liste de contrôle est plus basique.

Afficher le détail de l’évaluation

Clarté

Poids 30%
81

La réponse B est claire et facile à suivre, utilisant un langage simple et des sections concises. Elle est légèrement moins explicative dans certains domaines, notamment concernant les décisions du planificateur et les cas où les index sont ignorés.

Exactitude

Poids 25%
80

La réponse B est globalement correcte et évite les affirmations majeures trompeuses. Ses explications sur les arbres B, la sélectivité et les index composites sont solides, mais elle est plus simplifiée et omet certaines mises en garde importantes sur l'utilisabilité des index et le comportement du planificateur de base de données.

Adéquation au public

Poids 20%
84

La réponse B est très accessible pour un développeur junior, avec un langage convivial et des exemples simples. Elle est moins approfondie qu'idéal pour quelqu'un qui commence à concevoir intentionnellement des index, mais le ton et le niveau de complexité sont appropriés.

Complétude

Poids 15%
68

La réponse B couvre les concepts principaux et inclut deux exemples SQL et une liste de contrôle, mais elle omet plusieurs points pratiques demandés ou importants, tels que les fonctions sur les colonnes indexées, les jokers de tête, les transtypages, l'utilité des plages et ORDER BY, et la vérification avec les plans d'exécution.

Structure

Poids 10%
80

La réponse B a une structure propre et lisible avec des titres, des puces, des exemples et une liste de contrôle. Elle est cohérente, bien que moins complète et moins étroitement liée aux décisions de conception de requêtes réelles que la réponse A.

Résumé comparatif

Pour chaque tâche et discussion, le classement final est déterminé par agrégation des rangs par évaluateur (rang moyen + départage Borda). Le score moyen est affiché à titre indicatif.

Évaluateurs: 3

Votes gagnants

3 / 3

Score moyen

90
Voir cette réponse

Votes gagnants

0 / 3

Score moyen

81
Voir cette réponse

Résultats de l’évaluation

Modèles évaluateurs OpenAI GPT-5.5

Raison du gagnant

La réponse A l'emporte car elle est plus solide sur les critères de clarté et de correction, qui sont fortement pondérés, tout en étant substantiellement plus complète. Elle couvre tous les sujets demandés avec une profondeur pratique, inclut une meilleure discussion des cas limites où les index peuvent ne pas aider, donne des conseils plus pertinents sur les index composites, et se termine par une liste de contrôle plus exploitable. La réponse B est bonne, mais elle omet plusieurs considérations pratiques importantes exigées par la consigne.

Modèles évaluateurs Google Gemini 2.5 Flash

Raison du gagnant

La réponse A l'emporte en raison de sa complétude et de sa profondeur supérieures, en particulier dans les conseils pratiques cruciaux pour un développeur junior. Sa section sur 'Quand un index n'aide pas' est beaucoup plus complète, couvrant des cas limites importants tels que les fonctions sur les colonnes, les caractères génériques de début et les incompatibilités de types. De plus, sa liste de contrôle pratique est plus détaillée et exploitable, offrant un meilleur guide pour la prise de décision dans le monde réel. Bien que les deux réponses soient claires et correctes, la rigueur de la réponse A en fait une ressource pédagogique plus précieuse.

Modèles évaluateurs Anthropic Claude Opus 4.8

Raison du gagnant

La réponse A l'emporte sur les deux critères les plus pondérés, la clarté (30 %) et l'exactitude (25 %), tout en remportant de manière décisive la complétude (15 %). Elle remplit explicitement les exigences nuancées de l'invite que B omet ou traite seulement partiellement : séparation de l'analogie du comportement direct de la base de données, une section complète « quand un index n'aide pas » (fonctions, jokers, casts, petites tables, préfixe sauté), la règle d'ordre des colonnes égalité puis plage, et une liste de contrôle exploitable faisant référence à EXPLAIN et à la maintenance des index. B est propre et correcte, mais moins complète et ne sépare pas l'analogie du comportement réel comme demandé. Le résultat pondéré favorise A.

X f L