sql >> Base de Datos >  >> RDS >> PostgreSQL

Eliminación lenta de Postgresql desde donde existe

La eliminación de 3,7 millones de filas lleva mucho tiempo debido a la sobrecarga de buscar cada fila y luego registrar y eliminar las filas. Solo pensar en todas las páginas sucias, registros y errores de caché es alucinante, sin mencionar las actualizaciones de los índices también.

Por esa razón, algo como esto puede ser mucho más rápido:

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;

También debe eliminar los índices antes del truncamiento y luego volver a crearlos.