SQL資料表之刪除資料(Delete VS Truncate)

這篇是寫給我自己看的,因為刪除資料在我的觀念裡面就是下DELETE指令,前陣子才接觸到TRUNCATE指令,方才知道用這個指令來刪除資料會更具備效能。

如果你的資料表有超過一百萬筆以上的資料,當你下DELETE指令時,其實他在資料庫中的動作還是一筆一筆砍,所以也就會在背後一筆一筆登錄交易記錄,此消彼漲一來一往,速度效能之慢可想而知。

又,當DELETE指令在那邊慢慢砍資料時,也可以想像每筆資料都會在刪除的當下「被鎖定」與「解除鎖定」,如果這個資料表同時間又有SQL連線正在存取,則發生死結(等待解除鎖定)的時間也會大量的增加。

SQL TRUNCATE指令

TRUNCATE TABLE "表格名稱";

使用TRUNCATE指令的優點

  1. Truncate會移除資料表中的所有資料列,但會保留資料表結構及其欄位、條件約束、索引。
  2. 識別編號會重設為原本定義的初始值。如果未定義任何初始值,會使用預設值1。
  3. 交易記錄只會記錄頁面的取消配置,故使用較少的交易記錄磁碟空間。
  4. 不用逐筆刪除,因此鎖定資料表的時間會變得非常小。

SQL資料表的刪除指令總結

  1. DELETE:適合刪除小範圍的資料列。
  2. TRUNCATE:適合進行內部資料完全丟棄但又要保留表格結構資訊。(若這張資料表有被做SqlReplication複寫發行,則不適用這個指令)
  3. DROP:不顧一切的把這張資料表完全移除。
SQL Command DELETE TRUNCATE DROP