【SQL】DELETE文の代替

データベーススペシャリストの過去問にDELETE文でロック待ちが発生した際の対策として記載されていたテク。
普段からデータベースを使っている人にとっては常識なのかもしれない。

  1. 残したいレコードを取得しファイルに書き出す
  2. TRUNCATE TABLE文でテーブルを空にする
  3. 1で書き出したファイルをテーブルに読み込む

問題では「1で取得したレコードをバックアップとして保管する」という制約があったのでファイルに書き出すとしているが、普通に使う分にはメモリに読み込めば良さそう。

  • DELETE文は1レコード毎に削除及びログ書き込みが行われるため遅い。
  • TRUNCATE TABLE文の場合はログ書き込みを行わないためDELETE文より高速。ただし全行削除しかできない。
ということなので、テーブルのレコード数が多く且つ削除対象レコードの数>>削除対象外のレコード数の場合は効果がありそう。