Tôi cần xóa một cơ sở dữ liệu SQL rất cồng kềnh bằng cách xóa các bản ghi cũ hơn hai năm từ một số bảng. Cách hiệu quả nhất để làm điều này là gì ?.Truy vấn SQL để xóa các bản ghi cũ hơn hai năm
Trả lời
Bạn có cách nào để xác định bản ghi "cũ" không? (tức là, có một cột trong bảng đại diện cho độ tuổi của hàng hoặc ngày có thể được sử dụng để tính tuổi không?). Nếu vậy, nó phải là một đơn giản
DELETE FROM Table WHERE Age > 2
Ví dụ, nếu bạn có một cột DateTime
gọi CreateDate
, bạn có thể làm điều này:
DELETE FROM Table WHERE DATEADD(year, 2, CreateDate) < getdate()
Có thể khá khó chịu về khóa mặc dù. –
@Martin: Tôi không chắc chắn điều đó có thể tránh được hoặc thậm chí nếu bạn muốn * nó trở thành. Tôi không thấy làm thế nào điều này là "khó chịu" trong điều khoản của khóa hơn bất kỳ 'DELETE' hoặc' UPDATE', khác với thực tế là nó liên quan đến một bảng quét. –
Việc xóa các lô có thể tốt hơn cho đồng thời. –
Ngoài câu trả lời tốt Adam Robinson: Khi thực hiện này loại hoạt động:
- Chạy truy vấn SELECT với mệnh đề WHERE DELETE trước để đảm bảo bạn đang nhận được "đúng dữ liệu"
- Thực hiện sao lưu đầy đủ
- Run điều trong "off" giờ để không làm ảnh hưởng đến người sử dụng quá nhiều
Tôi đã nhìn thấy dba làm điều này trong một vài công ty khác nhau và nó luôn luôn dường như sử dụng các định dạng sau:
- Sao lưu bàn
- Drop bất kỳ chỉ số
- Chọn các hàng bạn muốn giữ lại vào một bảng temp
- trun Cate bảng gốc
- Insert (vào bảng nguồn của bạn) từ bạn bảng temp
- Tạo lại chỉ số
Lợi ích đối với phương pháp này là này cập nhật doesnt ghi vào các bản ghi vì vậy họ không có được được thổi bởi hàng ngàn mục xóa. Nó cũng nhanh hơn.
Hạn chế là bản cập nhật không ghi vào nhật ký để lựa chọn duy nhất của bạn là khôi phục bản sao lưu.
Bạn nên nghĩ đến việc giữ nhà đúng chỗ. Nếu ở trên, là quá đáng sợ, sau đó bạn cũng có thể sử dụng nhà giữ để winnow cơ sở dữ liệu trong một vấn đề thời gian.
Trong MSSQL, bạn có thể tạo công việc để chạy hàng ngày sẽ xóa 1000 hàng đầu tiên trong truy vấn của bạn. Để ăn cắp truy vấn của Adam -
DELETE TOP 1000 FROM table WHERE DATEADD (năm, 2, Tạo ngày) < getdate()
này sẽ rất an toàn và sẽ thoát khỏi dữ liệu của bạn trong ba tháng hoặc lâu hơn một cách an toàn và họ cũng sẽ duy trì kích thước của db trong tương lai.
Cơ sở dữ liệu của bạn sẽ sử dụng không gian này trong tương lai nhưng nếu bạn muốn khôi phục dung lượng, bạn sẽ cần phải thu hẹp cơ sở dữ liệu. Đọc xung quanh nếu bạn quan tâm - liệu nó có đáng hay không phụ thuộc vào lượng không gian để phục hồi so với tổng kích thước của db.
- 1. câu lệnh SQL để xóa các bản ghi cũ hơn XXX miễn là có hơn hàng YY
- 2. Xóa các mục cũ hơn một ngày - SQL Server
- 3. Phát hiện Trình duyệt cũ hơn hai năm
- 4. Truy vấn SQL để xóa các hàng cũ nhất trên một số hàng nhất định?
- 5. truy vấn sql để tìm các bản ghi trùng lặp
- 6. Truy vấn SQL - Xóa các bản sao nếu có nhiều hơn 3 dups?
- 7. truy vấn sql để xóa hồ sơ
- 8. SQL Nhận tất cả các bản ghi cũ hơn 30 ngày
- 9. Truy vấn SQL để truy xuất dữ liệu năm tài chính được nhóm theo năm
- 10. Tự động xóa các bản ghi IntelliTrace cũ
- 11. Truy vấn xóa SQL Server liên quan đến hai bảng
- 12. Tạo truy vấn SQL để truy xuất các bản ghi gần đây nhất
- 13. So sánh hai truy vấn SQL lớn
- 14. truy vấn sql để thiết lập năm như tên cột
- 15. truy vấn sql để nhận nội dung cũ hơn 3 tuần
- 16. Xem truy vấn SQL cho bộ truy vấn Django xóa
- 17. Xóa bản ghi cũ khỏi bảng mysql nhưng vẫn giữ bản sao lưu
- 18. Truy vấn MYSQL/ngày cũ hơn 1 tuần trước (tất cả các dữ liệu trong UTC)
- 19. MySQL Truy vấn để xóa các hàng có dấu thời gian cũ hơn dấu thời gian hiện tại
- 20. Truy vấn Oracle SQL ghi nhật ký
- 21. Truy vấn 5 năm qua
- 22. Truy vấn SQL trong đó() ngày của năm là $
- 23. SVN - xóa bản sửa đổi hoặc sửa đổi cũ hơn
- 24. Cách chọn bản ghi nếu truy vấn trả về một hàng hoặc chọn không có bản ghi nếu truy vấn trả về nhiều hàng hơn
- 25. Xóa tệp cũ hơn X phút
- 26. Xóa các bản ghi cũ nhất khỏi cơ sở dữ liệu
- 27. Truy vấn Sql bị gián đoạn bởi máy chủ cho một bảng có hơn 1 triệu bản ghi?
- 28. Truy vấn SQL qua hai kết nối?
- 29. Phép trừ giữa hai truy vấn sql
- 30. Truy vấn ActiveRecord chậm hơn nhiều so với SQL thẳng?
RDBMS là gì? Có bao nhiêu hồ sơ lớn hơn 2 năm?Có bao nhiêu hồ sơ trẻ hơn 2 năm? –
Có một tập hợp phổ biến các trường "được tạo" hoặc "được cập nhật lần cuối" trên mỗi bảng không? –
Thêm sản phẩm SQL bạn đang sử dụng là quan trọng (MSSQL, mySQL, v.v.). Trong MSSQL chẳng hạn, nếu bạn có hàng trăm nghìn hàng, bạn sẽ muốn xem ra cho sự tăng trưởng nhật ký giao dịch. –