毎日温泉に入りたい♨︎

見た物や買った物、投資についてを書いてますヽ(* ॑꒳ ॑* )ノダァーッ!!

1億件単位のテーブルにdelete文発行した時の所感

DBはmysql versonは5.6シリーズ

削除対象は期間による条件でpkでもなければindexも貼られていない。

DBに存在する件数は約1億5千万レコード、その中から対象期間分だけを削除する必要があった。

削除件数でいうとおよそ2千万件ほど。ざっくり消す為sqlは単純。

1
2
3
4
5
6
7
DELETE
FROM
 TAXRATE_TBL
WHERE
target_date > '2018/01/01 00:00:00' AND target_date <= '2018/05/31 24:00:00'
  LIMIT 1000000

 一気に全量を削除しようとするとロークバック領域が溢れてしまい戻しが出来なくなる懸念があった。
その為LIMIT句を付けて100万~200万レコードずつちまちまDELETEしていく作業とした。

全てコマンドライン実行である。

explainでdelete分を確認したが当然フルスキャンになっていた。

100万件での削除速度は1分前後、

200万件では2分強〜2分半強くらいと以外と速かった。

ただし最終削除時は削除した件数がキリの良い数字ではないので、削除件数表示の為に完全フルスキャンになり19分ほど要した。

ちなみにindexなしのこのテーブルの件数を確認した時のcountは18〜19分ほどかかっている。

この時のdump出力も期間指定で15〜20分ほどで出力されているので、

全体的に思っているよりも高速に実行されることが分かった。