PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Postgresql eliminazione lenta da dove esiste

L'eliminazione di 3,7 milioni di righe richiede molto tempo, a causa del sovraccarico di ricerca di ogni riga e quindi della registrazione e dell'eliminazione delle righe. Il solo pensiero di tutte le pagine sporche, la registrazione e le mancate cache è sbalorditivo, per non parlare anche degli aggiornamenti degli indici.

Per questo motivo, qualcosa del genere può essere molto più veloce:

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;

Dovresti anche eliminare gli indici prima del troncamento e poi ricrearli in seguito.