Exercice 48 / 60

Performance - EXPLAIN

ConsigneÉcris la requête qui compte le nombre de cours par étudiant (LEFT JOIN inscriptions, GROUP BY étudiant, colonne nb_cours), en ne gardant que ceux ayant plus de 2 cours, triée par nb_cours décroissant puis par nom. La leçon explique comment lire son plan d'exécution avec EXPLAIN ANALYZE.

📖 Cours

explain analyze montre comment PostgreSQL exécute une requête et le temps réel pris. C'est l'outil pour diagnostiquer la lenteur. Syntaxe : explain analyze select ...;

A lire

Seq Scan = parcours de toute la tableIndex Scan = accès direct via un indexactual time = temps réel en millisecondes
EXPLAIN ANALYZE dit comment PostgreSQL a exécuté la requête : le Seq Scan parcourt toute la table, l'Index Scan va droit aux lignes, et le premier n'est pas forcément le plus lent
EXPLAIN ANALYZE dit comment PostgreSQL a exécuté la requête : le Seq Scan parcourt toute la table, l'Index Scan va droit aux lignes, et le premier n'est pas forcément le plus lent

Un Seq Scan n'est pas un défaut en soi. Sur une petite table, ou quand la requête ramène une grande part des lignes, le parcours complet est le plus rapide et PostgreSQL le préfère même quand un index existe : sur la table etudiants (25 lignes), explain analyze select * from etudiants where id = 5 affiche un Seq Scan alors que id porte la clé primaire, parce que le parcours complet lui coûte 1.31 quand le passage par l'index lui coûterait 8.15. Un Seq Scan ne trahit un index manquant que si la table est grosse et le filtre très sélectif.

Exemple (clients + commandes) :

EXPLAIN ANALYZESELECT c.nom, COUNT(cmd.id) FROM clients cLEFT JOIN commandes cmd ON c.id = cmd.client_idGROUP BY c.nom;

Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →