Un index, c’est une table des matières
Comprenez pourquoi une base peut retrouver une ligne sans tout parcourir.
Où en êtes-vous avec cette notion ?
Une indication personnelle, enregistrée uniquement dans ce navigateur.
À lire ensuite
Le format café
L’essentiel à comprendre, le temps d’un café.
Envie de creuser ? Un cours plus complet vous attend juste après, à déplier sans quitter cette page.
Retrouver sans tout lire
Un index est une structure de données auxiliaire. Comme la table des matières d’un livre, il aide à atteindre des données sans nécessairement parcourir toute la table.
Un exemple
CREATE INDEX lessons_published_idx ON lessons (published);
EXPLAIN SELECT * FROM lessons WHERE published = true;
Cet index n’est pas automatiquement utile : si presque toutes les lignes sont publiées, un parcours séquentiel peut coûter moins cher. La distribution des données et la sélectivité comptent.
Le coût oublié
Chaque insertion ou modification doit entretenir les index concernés. Multiplier les index ralentit les écritures et consomme de l’espace.
Fiche mémo
Mesurez une requête réelle, examinez son plan, puis testez votre hypothèse. Un index doit correspondre à un besoin d’accès observé.
Et si on allait plus loin ?
Le café vous a donné les repères. Prenez maintenant le temps de comprendre les mécanismes et de pratiquer, si vous le souhaitez.
Aller plus loinChoisir un index à partir d’une requête et de son planDévelopper le coursReplier le cours
Ce que vous saurez faire
Formuler une hypothèse d’indexation, lire un plan et comparer avant/après sans confondre estimation et mesure. Faites cet atelier dans une base jetable dédiée aux essais.
1. Partir d’une question précise
Notre écran affiche les dix derniers cours d’un auteur. Les conditions et l’ordre demandé orientent le choix de l’index, pas seulement le nom des colonnes.
CREATE TABLE index_lab (
id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
author_id integer NOT NULL,
published_at timestamptz NOT NULL
);
INSERT INTO index_lab (author_id, published_at)
SELECT n % 100, now() - n * interval '1 minute'
FROM generate_series(1, 10000) AS n;
ANALYZE index_lab;
EXPLAIN (ANALYZE, BUFFERS)
SELECT id, published_at FROM index_lab
WHERE author_id = 7
ORDER BY published_at DESC
LIMIT 10;
Le plan décrit une suite d’opérations. Repérez le parcours de table ou d’index, un éventuel tri et les nombres de lignes estimés puis réellement obtenus. Les coûts ne sont pas des millisecondes. ANALYZE dans EXPLAIN exécute réellement la requête : ne l’appliquez pas distraitement à une écriture en production.
Référence : lire EXPLAIN.
2. Tester un index cohérent avec cet accès
CREATE INDEX index_lab_author_date_idx
ON index_lab (author_id, published_at DESC);
ANALYZE index_lab;
Relancez exactement la même requête avec EXPLAIN (ANALYZE, BUFFERS). Dans cet index B-tree, l’auteur est la première clé ; la date ordonne les entrées à l’intérieur de chaque auteur. Cela correspond au filtre d’égalité suivi de l’ordre demandé.
Ce n’est pas une promesse de résultat universel. Pour rechercher les cours récents de tous les auteurs, ce même index ne correspond plus aussi directement au besoin. La taille de la table et la distribution des valeurs influencent également le choix du planificateur.
Référence : index multicolonnes.
3. Comparer équitablement
Conservez les mêmes données et requêtes. Répétez les essais : un deuxième passage peut profiter de pages déjà en mémoire. Mesurez aussi le coût des écritures et l’espace occupé avant de multiplier les index.
À vous de jouer
Sur une minuscule table, PostgreSQL garde un parcours séquentiel après création de l’index. Cela signifie-t-il que l’index est cassé ?
Correction commentée
Non. Lire quelques pages peut coûter moins cher qu’emprunter l’index puis accéder aux lignes. Vérifiez les statistiques et testez sur un volume représentatif. Le but est d’améliorer le temps et les ressources consommées par une requête réelle, pas de forcer l’apparition du mot « Index » dans le plan.
Vous pouvez aussi vous arrêter ici. L’approfondissement est facultatif.
Les repères Cours Café
Pour aller à la source
Documentation de référence. Vérification éditoriale encore à effectuer.
Gardez une trace de cette idée.
Favoris, notes et progression seront disponibles après connexion du stockage distant.