Bonjour,
Je réalise de nombreuses requêtes de mise en jour sur une base postgres. Les tables mises à jour possèdent plusieurs millions de lignes (entre 3 et 4 millions). Le temps de mise à jour me semble particulièrement long... Mais, est ce que je fais bien les choses ???
Pour exemple, voici une requête type :
Un explain me renvoi ce résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 WITH ident_surf_bati_uf AS ( SELECT edi_parc.id_uf, SUM(edi_parc.surf_bati_dur) AS surf_bati_dur, SUM(edi_parc.surf_bati_leger) AS surf_bati_leger, SUM(edi_parc.surf_bati_total) AS surf_bati_tot, SUM(edi_parc.surf_resultante_tt_bati) AS surf_resultante_tt_bati FROM cad_2015.edi_parc GROUP BY edi_parc.id_uf) UPDATE cad_2015.edi_parc_uf SET surf_bati_leger = ident_surf_bati_uf.surf_bati_leger, surf_bati_dur = ident_surf_bati_uf.surf_bati_dur, surf_bati_tot = ident_surf_bati_uf.surf_bati_tot, surf_resultante_tt_bati = ident_surf_bati_uf.surf_resultante_tt_bati FROM ident_surf_bati_uf WHERE ident_surf_bati_uf.id_uf = edi_parc_uf.id_centr ;
Suis-je fautif de mauvaises requêtes ou bien ces résultats sont-ils "acceptables" ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 "Update on edi_parc_uf (cost=4198990.84..6334634.17 rows=850593 width=1510)" " CTE ident_surf_bati_uf" " -> GroupAggregate (cost=1073593.37..1130730.27 rows=850593 width=76)" " -> Sort (cost=1073593.37..1081698.53 rows=3242065 width=76)" " Sort Key: edi_parc.id_uf" " -> Seq Scan on edi_parc (cost=0.00..290808.65 rows=3242065 width=76)" " -> Hash Join (cost=3068260.56..5203903.90 rows=850593 width=1510)" " Hash Cond: (ident_surf_bati_uf.id_uf = edi_parc_uf.id_centr)" " -> CTE Scan on ident_surf_bati_uf (cost=0.00..17011.86 rows=850593 width=576)" " -> Hash (cost=940953.14..940953.14 rows=13298914 width=1178)" " -> Seq Scan on edi_parc_uf (cost=0.00..940953.14 rows=13298914 width=1178)"
Merci d'avance pour vos conseils.
Partager