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 :

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
;
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
 
"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)"
Suis-je fautif de mauvaises requêtes ou bien ces résultats sont-ils "acceptables" ?

Merci d'avance pour vos conseils.