在 SQL Server 內,要刪除大量資料和資料表,可以參考下列方式,避免用到效能較差的方式刪除。
刪除大量資料
刪除大量資料的原則,是「減少鎖定整張資料表的機會」,其做法有下列幾種:
- 搭配 ROWLOCK 提示字,降低被升級成 Table-Lock 的機會。
DELETE TOP (1000)
FROM YourTable WITH (ROWLOCK)
WHERE YourCondition
- 可以在讀取要刪除的資料時加入 READPAST,讓其它交易略過被鎖的資料。
DELETE T
FROM (
SELECT TOP (1000) *
FROM YourTable WITH (READPAST)
WHERE YourCondition
) T
- 將大量的欲刪除資料改成分批刪除,減少升級成 Table-Lock 的機會。
刪除整張資料表
- 可以用 Delete 刪除資料表的所有資料,但因為是資料操作語法 (DML),會留下大量的交易紀錄;此外刪除期間會鎖定每一筆資料;不會重設編號。
DELETE FROM MyTable
- Truncate 可以刪除資料表的所有資料,只留下資料結構;不會鎖定資料;會重設編號。
TRUNCATE TABLE MyTable
- Drop Table 會將整個資料表的資料和資料結構都刪除掉。
DROP TABLE MyTable
