Temps d'execution de requête très long
Bonjour à tous,
Voila j'ai une table dans ma base Postgres qui contient plus de 6 millions de lignes.
Mais une simple requête update par exemple prend plus de 30 min.
Exemple
Code:
update reprise_journal r set id_agen = a.id from agen a WHERE r.code = a.code and statut in ('A' , 'B');
met 32 min
Code:
select * from reprise_journal where statut in ('A' , 'B');
met 1 min 50 secs
J'ai meme créé des Indes dans les deux table:
idx_reprise_journal_code
idx_reprise_journal_statut
idx_agen_code
J'aimerai vraiment avoir un tuyau pour l'optimisation d'une table postgres avec des millions de données.
Je vous remercie d'avance
Quelques pistes d'optimisations
(1) Avec une telle volumétrie un UPDATE sera lent si id_gen dispose ou fait partie d'un index, parce que pour toute mise à jour, il faudra recalculer l'index.
En espérant que ce n'est pas le cas.
Combien de lignes retourne cette requête ?
Code:
1 2 3 4 5
|
SELECT COUNT(*)
FROM reprise_journal r
INNER JOIN agen a on r.code = a.code
WHERE statut in ('A' , 'B') |
(2) Faire Un VACUUM sur la table reprise_journal pour faire le menage, surtout si des mises à jour sont faites régulièrement dessus.
Code:
VACUUM FULL reprise_journal
https://www.postgresql.org/docs/9.5/sql-vacuum.html
(2) Essayez aussi la commande EXPLAIN pour analyser la requête
Code:
1 2 3 4 5
|
EXPLAIN ANALYZE
UPDATE reprise_journal r
SET id_agen = a.id from agen a
WHERE r.code = a.code and statut in ('A' , 'B'); |