🛢️Parcours Fioul GroupéMySQL · Chapitre 15
Accueil › MySQL › Chapitre 15
Chapitre 15 / 16

Les index et l'optimisation des performances

Un index accélère la recherche comme l'index d'un livre. Savoir quand en poser, lire un plan d'exécution et éviter les pièges transforme une base lente en base rapide.

1 Notion

Qu'est-ce qu'un index ?

Sans index, retrouver une ligne oblige à parcourir toute la table (full scan). Un index est une structure ordonnée (arbre B-tree) qui localise directement les lignes. La clé primaire et les UNIQUE sont indexés d'office.

CREATE INDEX idx_commande_campagne ON commande(campagne_id);
CREATE INDEX idx_campagne_commune_statut ON campagne(commune, statut);
SHOW INDEX FROM commande;
Quelles colonnes — celles des WHERE, JOIN ... ON et ORDER BY fréquents. Un index composite (a, b) sert a seul ou a+b, pas b seul (règle du « préfixe gauche »).
2 Outil

Lire un plan avec EXPLAIN

EXPLAIN montre comment MySQL compte exécuter une requête, sans la lancer.

EXPLAIN SELECT * FROM commande WHERE campagne_id = 1;
3 Notion

Le coût des index

Un index n'est pas gratuit — il occupe de la place et doit être mis à jour à chaque écriture. Trop d'index ralentit les INSERT/UPDATE. Indexez ce qui sert, mesurez, supprimez l'inutile.

Autres leviers : éviter SELECT * ; ne pas appliquer de fonction sur une colonne indexée (WHERE YEAR(d)=2026 casse l'index — préférez d >= '2026-01-01' AND d < '2027-01-01') ; paginer par bornes plutôt qu'un gros OFFSET ; viser un index couvrant pour les requêtes critiques.

🛢️ Sur le projet Fioul Groupé

L'écran « campagnes ouvertes de ma commune, triées par prix » tourne des milliers de fois : un index campagne(commune, statut, prix_litre) filtre et fournit les lignes déjà triées, évitant à la fois le parcours complet et le tri en mémoire. Idem sur commande(campagne_id) pour l'agrégation du volume.

À retenir
← Chapitre 14