PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Langsames Löschen von Postgresql von wo vorhanden

Das Löschen von 3,7 Millionen Zeilen ist sehr zeitaufwändig, da jede Zeile nachgeschlagen und anschließend protokolliert und gelöscht werden muss. Allein an all die Dirty Pages, Logging und Cache Misses zu denken, ist verblüffend – ganz zu schweigen von den Aktualisierungen der Indizes.

Aus diesem Grund kann so etwas viel schneller sein:

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;

Außerdem sollten Sie die Indizes vor dem Abschneiden löschen und danach neu erstellen.