Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm thế nào để xóa dữ liệu lớn của bảng trong SQL mà không có nhật ký?

  1. 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.

  1. 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.

  2. 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.

  3. 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).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tuân thủ GDPR và Máy chủ SQL của bạn

  2. Sự cố khi mở tệp MDF vì nó báo lỗi SQL 5171? - Bài đăng của khách của Andre Williams

  3. SQL Server Deadlock là gì?

  4. Cơ sở dữ liệu là gì, Tại sao lại là Cơ sở dữ liệu?

  5. Hàm tách tương đương trong T-SQL?