sql >> データベース >  >> RDS >> PostgreSQL

孤立したレコードのPostgres削除を最適化する

    このような問題への1つのアプローチは、より小さなチャンクでそれを行うことです。

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

    すすぎ、繰り返します。さまざまなチャンクサイズを試して、すべてのクエリをメモリに保持しながら、使用するクエリが最も少ないデータセットに最適なチャンクサイズを見つけてください。

    当然のことながら、おそらくplpgsqlで、または任意のスクリプト言語でこれをスクリプト化することをお勧めします。



    1. psycopg2.ProgrammingError:関係の一致が存在しません

    2. php+mysql挿入エラー

    3. SQLServerでの動的SQL実行

    4. MySQLでのRPAD()関数のしくみ