Att ta bort 3,7 miljoner rader är mycket tidskrävande, på grund av den omkostnad som krävs för att slå upp varje rad och sedan logga och ta bort raderna. Att bara tänka på alla smutsiga sidor, loggning och cachemissar är häpnadsväckande – för att inte tala om uppdateringar av indexen också.
Av den anledningen kan något sådant här vara mycket snabbare:
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;
Du bör också släppa indexen före trunkeringen och sedan återskapa dem efteråt.