-
Nếu bạn đang xóa tất cả các hàng trong bảng đó, tùy chọn đơn giản nhất là Cắt bớt bảng, giống như
TRUNCATE TABLE LargeTable GO
Bảng cắt ngắn sẽ chỉ làm trống bảng, bạn không thể sử dụng mệnh đề WHERE để giới hạn các hàng bị xóa và không có trình kích hoạt nào được kích hoạt.
-
Mặt khác, nếu bạn đang xóa hơn 80-90 Phần trăm dữ liệu, giả sử nếu bạn có tổng số 11 triệu hàng và bạn muốn xóa 10 triệu theo cách khác là Chèn 1 triệu hàng này (các bản ghi bạn muốn giữ ) sang một bảng dàn dựng khác. Cắt bớt bảng lớn này và Chèn lại 1 triệu hàng này.
-
Hoặc nếu quyền / chế độ xem hoặc các đối tượng khác có bảng lớn này làm bảng bên dưới của chúng không bị ảnh hưởng khi bỏ bảng này, bạn có thể lấy số lượng hàng tương đối nhỏ này vào một bảng khác, thả bảng này và tạo một bảng khác với cùng lược đồ và nhập các hàng này trở lại bảng Ex-Large này.
-
Một tùy chọn cuối cùng mà tôi có thể nghĩ đến là thay đổi
Recovery Mode to SIMPLE
và sau đó xóa các hàng theo lô nhỏ hơn bằng cách sử dụng vòng lặp while như sau:DECLARE @Deleted_Rows INT; SET @Deleted_Rows = 1; WHILE (@Deleted_Rows > 0) BEGIN -- Delete some small number of rows at a time DELETE TOP (10000) LargeTable WHERE readTime < dateadd(MONTH,-7,GETDATE()) SET @Deleted_Rows = @@ROWCOUNT; END
và đừng quên thay đổi chế độ Khôi phục trở lại đầy đủ và tôi nghĩ bạn phải sao lưu để làm cho nó hoạt động hoàn toàn (các chế độ thay đổi hoặc khôi phục).