直接 DELETE 大量資料會產生大量記錄檔、佔用 Rollback Segment、速度極慢。若需條件刪除(如保留近期資料),最佳策略:將要保留的資料 SELECT INTO 新表 → TRUNCATE TABLE 清空原表(不記錄檔、瞬間完成) → 重新命名新表取代原表。附完整 T-SQL 範例。
-- 1. 將保留資料複製到新表(SELECT INTO 記錄較少)
SELECT * INTO Table2 FROM Table1 WHERE Time >= '2006-03-10';
-- 2. 截斷原表(DDL 操作,不產生 Rollback,不寫記錄檔,極快)
TRUNCATE TABLE Table1;
-- 3. 重新命名新表為原表名
EXEC sp_rename 'Table2', 'Table1';
TRUNCATE 是 DDL,不觸發 Trigger、不記錄逐列刪除、立即釋放頁面。SELECT INTO 仍會產生一些記錄,但遠小於 DELETE。