PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Suppression lente de Postgresql à partir de l'endroit où il existe

La suppression de 3,7 millions de lignes prend beaucoup de temps, en raison de la surcharge liée à la recherche de chaque ligne, puis à la journalisation et à la suppression des lignes. Le simple fait de penser à toutes les pages sales, à la journalisation et aux échecs de cache est ahurissant, sans parler des mises à jour des index.

Pour cette raison, quelque chose comme ça peut être beaucoup plus rapide :

create temporary table temp_n2p as 
    select n2p.*
    from "target".name2phoneme n2p
    where not exists (select 1
                      from delta.name2phoneme d 
                      where n2p.NAME_ID = d.NAME_ID and
                            n2p.PHONEME_ID = d.PHONEME_ID
                     );

truncate table "target".name2phoneme;

insert into "target".name2phoneme
    select *
    from temp_n2p;

Vous devez également supprimer les index avant la troncature, puis les recréer après.