TRUNCATE
không tạo ra bất kỳ dữ liệu khôi phục nào, điều này làm cho nó nhanh như chớp. Nó chỉ phân bổ các trang dữ liệu được sử dụng bởi bảng.
Tuy nhiên, nếu bạn đang tham gia một giao dịch và muốn có khả năng "hoàn tác" việc xóa này, bạn cần sử dụng DELETE FROM
, mang lại khả năng khôi phục.
CHỈNH SỬA: Lưu ý rằng điều trên không chính xác đối với SQL Server (nhưng nó áp dụng cho Oracle). Trong SQL Server, có thể khôi phục hoạt động cắt ngắn nếu bạn đang ở trong một giao dịch và giao dịch chưa được cam kết. Từ góc độ SQL Server, một điểm khác biệt chính giữa DELETE FROM và TRUNCATE là this :"Câu lệnh DELETE xóa từng hàng một và ghi lại một mục nhập trong nhật ký giao dịch cho mỗi hàng đã xóa. BẢNG TRUNCATE xóa dữ liệu bằng cách phân bổ các trang dữ liệu được sử dụng để lưu trữ dữ liệu bảng và chỉ ghi lại các vị trí giao dịch trang trong nhật ký giao dịch . "
Nói cách khác, ít ghi nhật ký hơn trong một TRUNCATE bởi vì chỉ các vị trí giao dịch trang được ghi lại trong nhật ký giao dịch, trong khi với XÓA TỪ mỗi lần xóa hàng được ghi lại. Đó là một trong những lý do khiến TRUNCATE hoạt động nhanh như chớp.
Cũng lưu ý từ liên kết MSDN đó rằng bạn không thể cắt ngắn các bảng được tham chiếu bởi các ràng buộc khóa ngoại, tham gia vào chế độ xem được lập chỉ mục hoặc được xuất bản bằng cách sử dụng sao chép giao dịch hoặc sao chép hợp nhất.
CHỈNH SỬA 2: Một điểm quan trọng khác là BẢNG TRUNCATE sẽ đặt lại danh tính của bạn về hạt giống ban đầu, trong khi XÓA TỪ sẽ tiếp tục tăng dần từ nơi nó dừng lại. Tham khảo:Câu trả lời của Ben Robinson.