PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Optimiser la suppression Postgres des enregistrements orphelins

Une approche à des problèmes comme celui-ci peut être de le faire en plus petits morceaux.

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
);

Rincer, répéter. Expérimentez avec différentes tailles de blocs pour en trouver une optimale pour votre ensemble de données, qui utilise le moins de requêtes, tout en les gardant toutes en mémoire.

Naturellement, vous voudriez le scripter, éventuellement en plpgsql, ou dans le langage de script que vous préférez.