Adloun

Spring Boot : écrire le serveur (école d'ingénieur) · Chapitre 10 · Exercice de TD

Un index pour le rayon

PostgreSQL et les migrations · niveau 2

Énoncé

Le plan de la recherche par rayon est, aujourd'hui :


                       QUERY PLAN
---------------------------------------------------------
 Seq Scan on livre  (cost=0.00..10.88 rows=1 width=1035)
   Filter: ((rayon)::text = 'Littérature'::text)
(2 rows)

Ajouter un index sur le rayon par une migration, et montrer que PostgreSQL sait s'en servir.

Corrigé


-- Exercice 10.4 : la recherche par rayon n'a plus à lire toute la table.
create index livre_rayon on livre (rayon);

Avec six livres, lire la table entière reste moins cher que passer par l'index, et PostgreSQL continue de la lire en entier. Pour vérifier que l'index est utilisable, le test simule une grande table en interdisant la lecture séquentielle, puis affiche le plan :


    @Test
    void lIndexExisteEtSertQuandLaTableEstGrande() {
        assertThat(jdbc.queryForList("select indexname from pg_indexes where tablename = 'livre'", String.class))
                .contains("livre_pkey", "livre_rayon");
        jdbc.execute("set enable_seqscan = off"); // simule une grande table
        jdbc.queryForList("explain select * from livre where rayon = 'Littérature'", String.class)
                .forEach(ligne -> System.out.println("PLAN | " + ligne));
    }

PLAN | Index Scan using livre_rayon on livre  (cost=0.13..8.15 rows=1 width=1253)
PLAN |   Index Cond: ((rayon)::text = 'Littérature'::text)

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →