SQL ServerのDELETEとTRUNCATEの違い
ふんわりとしたイメージ
DELETE
条件指定できる(全部消すこともできる)
TRUNCATE
全部消す
ロールバックできない
調べた結果、条件で絞らずに消すならTRUNCATEの方が色々メリットある感じ?
トランザクションログのリソース軽減
トランザクションログの確認方法?
TRUNCATEはページ割り当て解除→割り当て解除したことをトランザクションログに記録する
ページってなんだ?
ページ割り当て解除の情報がトランザクションログにあるならそこからロールバックできないの?
ロック数の削減
DELETEは各行をロック
TRUNCATEはテーブルとページをロック
ロック数の調べ方?システム管理ビューかな?
テーブル内にページが残らない
ちょっとよくわかんない
DELETEだとヒープを食う?
どうやって調べるの?
参考
標準SQLの仕様でDELETEで1行も削除しなかった場合でもSQLエンジンが「該当データなし」を通知することを要求している DELETE FROM テーブル名より高速に実行できる
DELETEにはI/Oが発生する
DELETE後にはVACUUMが必要になる
DELETEはトランザクション内ならロールバックできるがTRUNCATEはできない
TRUNCATEはDELETEよりも高速である
DELETEはDMLの中でも実行に時間がかかる命令である
TRUNCATEコマンドはトランザクションブロックの中では実行できない