Изтриването на 3,7 милиона реда отнема много време, поради режийните разходи за търсене на всеки ред и след това регистриране и изтриване на редовете. Само като си помисля за всички мръсни страници, логване и пропуски в кеша е умопомрачително -- да не говорим и за актуализациите на индексите.
Поради тази причина нещо подобно може да бъде много по-бързо:
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;
Трябва също така да премахнете индексите преди отрязването и след това да ги създадете отново след това.