PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Exclusão lenta do Postgresql de onde existe


A exclusão de 3,7 milhões de linhas consome muito tempo, devido à sobrecarga de procurar cada linha e, em seguida, registrar e excluir as linhas. Só de pensar em todas as páginas sujas, logs e falhas de cache é incompreensível - sem mencionar as atualizações nos índices também.

Por esse motivo, algo assim pode ser muito mais rápido:
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;

Você também deve descartar os índices antes do truncamento e recriá-los posteriormente.