sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgresql långsam borttagning från där det finns

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.



  1. Konvertera Javascript-tid till MySQL-format med PHP

  2. JDBC batch operations förståelse

  3. SQL-fråga för att gruppera efter månadsdel av tidsstämpeln

  4. Uppdatera fråga baserat på skick