想定ケースとしては1億行くらいのテーブルから7000万行くらい消すクエリーを、レプリケーションが遅れずバッファプールも食い切らない程度にちまちま消すようにする。
DELETE FROM t1 WHERE hoge = 1 AND last_update < '2017-11-28'
「ちまちま削除する」なので、トランザクションでAll or Nothingを保証したい場合は使えない。
id
をプライマリーキー(ただしサロゲートキーかどうかは問わない)、
hoge
, last_update
が本来消し込みに使いたいカラムだとする。
プライマリーキー(またはユニークキー)がないテーブルのことは考えない。 KEY(hoge, last_update) がある場合
- ターゲットのプライマリーキーを取り出して
DELETE .. WHERE id IN ..
の形に落とし込む …