Explications
Fichier CSV des départements français (95 lignes)
Extrait des premières lignes du fichier :
numero,nom,pop
1,Ain,529
2,Aisne,552
3,Allier,357
4,Alpes-de-Haute-Provence,145
5,Hautes-Alpes,127
6,Alpes-Maritimes,1023
7,Ardèche,295
8,Ardennes,299
9,Ariège,143
numero,nom,pop 1,Ain,529 2,Aisne,552 3,Allier,357 4,Alpes-de-Haute-Provence,145 5,Hautes-Alpes,127 6,Alpes-Maritimes,1023 7,Ardèche,295 8,Ardennes,299 9,Ariège,143
Fichier CSV des villes françaises (36700 lignes)
Extrait des premières lignes du fichier :
codeinsee,departement,nom,pop2010,pop1999
1284,1,Ozan,618,469
1123,1,Cormoranche-sur-Saône,1058,903
1298,1,Plagne,129,83
1422,1,Tossiat,1406,1111
1309,1,Pouillat,88,58
1421,1,Torcieu,698,643
1320,1,Replonges,3500,2841
1119,1,Corcelles,243,222
1288,1,Péron,2143,1578
codeinsee,departement,nom,pop2010,pop1999 1284,1,Ozan,618,469 1123,1,Cormoranche-sur-Saône,1058,903 1298,1,Plagne,129,83 1422,1,Tossiat,1406,1111 1309,1,Pouillat,88,58 1421,1,Torcieu,698,643 1320,1,Replonges,3500,2841 1119,1,Corcelles,243,222 1288,1,Péron,2143,1578
Question
Instancier la base de données Postgres permettant de gérer ces fichiers.
VACUUM
Exécutez la commande ci-après, on observe seulement 21300 lignes collectées, là ou 36700 étaient attendues.
QUERY PLAN
-----------------------------------------------------------
Seq Scan on ville (cost=0.00..497.00 rows=21300 width=32)
QUERY PLAN ----------------------------------------------------------- Seq Scan on ville (cost=0.00..497.00 rows=21300 width=32)
Projection
Exécutez la commande ci-après permettant de projeter le nom des villes.
QUERY PLAN
-----------------------------------------------------------
Seq Scan on ville (cost=0.00..651.00 rows=36700 width=12)
QUERY PLAN ----------------------------------------------------------- Seq Scan on ville (cost=0.00..651.00 rows=36700 width=12)
Question
Quelle différence observez-vous avec le plan de la requête SELECT * FROM ville
? Expliquez.
Restriction et tri
Exécutez les commande ci-après permettant respectivement de faire une restriction et un tri sur le nom des villes.
QUERY PLAN
-------------------------------------------------------
Seq Scan on ville (cost=0.00..742.75 rows=1 width=12)
Filter: ((nom)::text = 'Compiègne'::text)
QUERY PLAN ------------------------------------------------------- Seq Scan on ville (cost=0.00..742.75 rows=1 width=12) Filter: ((nom)::text = 'Compiègne'::text)
QUERY PLAN
-----------------------------------------------------------------
Sort (cost=3433.50..3525.25 rows=36700 width=12)
Sort Key: nom
-> Seq Scan on ville (cost=0.00..651.00 rows=36700 width=12)
QUERY PLAN ----------------------------------------------------------------- Sort (cost=3433.50..3525.25 rows=36700 width=12) Sort Key: nom -> Seq Scan on ville (cost=0.00..651.00 rows=36700 width=12)
Question
Qu'observez-vous ? Proposez une solution pour améliorer ces deux requêtes. Mesurez le gain apporté par la solution. Notez les éventuels inconvénient apportés par la solution.
Jointure
Exécutez la commande ci-après permettant de faire une jointure.
Hash Join (cost=3.14..1136.96 rows=34520 width=22)
Hash Cond: (v.departement = d.numero)
-> Seq Scan on ville v (cost=0.00..651.00 rows=36700 width=16)
-> Hash (cost=1.95..1.95 rows=95 width=13)
-> Seq Scan on dpt d (cost=0.00..1.95 rows=95 width=13)
Hash Join (cost=3.14..1136.96 rows=34520 width=22) Hash Cond: (v.departement = d.numero) -> Seq Scan on ville v (cost=0.00..651.00 rows=36700 width=16) -> Hash (cost=1.95..1.95 rows=95 width=13) -> Seq Scan on dpt d (cost=0.00..1.95 rows=95 width=13)
Question
Indexez la clé étrangère v.departement
. Observez-vous pas de gain ? Expliquez.
Question
À partir des plans précédents, calculez le gain qu'apporterait une dénormalisation à cette jointure.