sql >> Database >  >> RDS >> PostgreSQL

Optimaliseer Postgres-verwijdering van verweesde records

Een benadering van dit soort problemen kan zijn om het in kleinere brokken te doen.

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

Spoel, herhaal. Experimenteer met verschillende chunk-groottes om de optimale voor uw dataset te vinden, die de minste zoekopdrachten gebruikt, terwijl ze allemaal in het geheugen worden bewaard.

Natuurlijk zou je dit willen scripten, mogelijk in plpgsql, of in welke scripttaal dan ook.



  1. Hoe NULL-waarden in MySQL te tellen?

  2. JOIN en GROUP_CONCAT met drie tabellen

  3. SQL Server - Kolommen selecteren die aan bepaalde voorwaarden voldoen?

  4. SQLite - Zet een tabel neer