一時テーブルを削除する直前に作成者が一時テーブルを切り捨てたコードがいくつかあります。これを行う理由はありますか?
TRUNCATE TABLE #Temp
DROP TABLE #Temp
一時テーブルを削除する直前に作成者が一時テーブルを切り捨てたコードがいくつかあります。これを行う理由はありますか?
TRUNCATE TABLE #Temp
DROP TABLE #Temp
Another reason is that a DROP TABLE
is a fully logged operation, so by truncating first (which is never logged) you lower transactional logging overhead.
おそらく作成者は、テーブルがすでに空で、TRUNCATE が DELETE よりも高速であることを知っていれば、DROP TABLE の方が高速であるという印象を受けていたのでしょう。
非常に大きな一時テーブルでは、切り捨ては単にポインターを移動するだけなので、最初に切り捨ててからドロップする方が速い場合があります。一時テーブルは自然に削除されるため、通常は必要ありません。
ナックルヘッドかもしれません。(私が完璧だというわけではありません)。
もう 1 つの可能性は、一時テーブルが 8 MB を超える場合に発生する遅延ドロップをコーダーが回避しようとしている可能性があります。つまり、切り捨ててからドロップします。これによって SQL エンジンがだまされるかどうかはわかりませんが、同期クリーンアップが強制される可能性があります。遅延ドロップの蓄積に関する問題を回避するために、なぜこれを行う必要があるのか わかりません(破棄のための一時テーブル)
おそらく、TRUNCATE
既存の外部キーが原因でコマンドが例外をスローするかどうかを確認しますか?