sql >> Databáze >  >> RDS >> PostgreSQL

Optimalizujte Postgres mazání osiřelých záznamů

Jedním z přístupů k problémům, jako je tento, může být dělat to po menších kouscích.

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

Opláchněte, opakujte. Experimentujte s různými velikostmi bloků, abyste našli optimální blok pro svůj soubor dat, který využívá nejméně dotazů a zároveň je všechny uchovává v paměti.

Přirozeně byste to chtěli naskriptovat, možná v plpgsql nebo v jakémkoli skriptovacím jazyce, který preferujete.



  1. Použijte hodnotu řetězcové proměnné ve smyčce SQL FOR-IN (SELECT).

  2. Odebírání COMMENT ON ze všech objektů v PostgreSQL

  3. Připojte se k databázi heroku pomocí pgadmin

  4. Nějaké dobré návody na relační databáze?