PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Optimieren Sie die Postgres-Löschung verwaister Datensätze

Ein Ansatz für solche Probleme kann darin bestehen, es in kleineren Stücken zu tun.

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

Spülen, wiederholen. Experimentieren Sie mit verschiedenen Chunk-Größen, um eine optimale Größe für Ihren Datensatz zu finden, die die wenigsten Abfragen verwendet und alle im Speicher behält.

Natürlich möchten Sie dies skripten, möglicherweise in plpgsql oder in einer anderen Skriptsprache, die Sie bevorzugen.