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

Optimice la eliminación de Postgres de registros huérfanos

Un enfoque para problemas como este puede ser hacerlo en partes más pequeñas.

DELETE FROM "contacts"
WHERE  "contacts"."id" IN (
    SELECT id
    FROM contacts
    LEFT OUTER JOIN members ON members.contact_id = contacts.id 
    WHERE members.id IS NULL
        AND id >= 1 AND id < 1000
);
DELETE FROM "contacts"
WHERE  "contacts"."id" IN (
    SELECT id
    FROM contacts
    LEFT OUTER JOIN members ON members.contact_id = contacts.id 
    WHERE members.id IS NULL
        AND id >= 1001 AND id < 2000
);

Enjuague, repita. Experimente con diferentes tamaños de fragmentos para encontrar uno óptimo para su conjunto de datos, que utilice la menor cantidad de consultas y las mantenga todas en la memoria.

Naturalmente, le gustaría escribir esto, posiblemente en plpgsql, o en cualquier lenguaje de secuencias de comandos que prefiera.