【SQL】DELETE文の代替
データベーススペシャリストの過去問にDELETE文でロック待ちが発生した際の対策として記載されていたテク。
普段からデータベースを使っている人にとっては常識なのかもしれない。
- 残したいレコードを取得しファイルに書き出す
- TRUNCATE TABLE文でテーブルを空にする
- 1で書き出したファイルをテーブルに読み込む
問題では「1で取得したレコードをバックアップとして保管する」という制約があったのでファイルに書き出すとしているが、普通に使う分にはメモリに読み込めば良さそう。
- DELETE文は1レコード毎に削除及びログ書き込みが行われるため遅い。
- TRUNCATE TABLE文の場合はログ書き込みを行わないためDELETE文より高速。ただし全行削除しかできない。