Usuwanie 3,7 miliona wierszy jest bardzo czasochłonne ze względu na narzut związany z wyszukiwaniem każdego wiersza, a następnie rejestrowaniem i usuwaniem wierszy. Samo myślenie o wszystkich brudnych stronach, logowaniu i błędach w pamięci podręcznej jest oszałamiające – nie wspominając o aktualizacjach indeksów.
Z tego powodu coś takiego może być znacznie szybsze:
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;
Powinieneś także usunąć indeksy przed obcięciem, a następnie odtworzyć je później.