Tôi muốn xóa khoảng 90% các hàng từ một bảng hàng triệu + hàng. Bất cứ điều gì tôi có thể làm để làm cho điều này nhanh hơn? ví dụ. nếu tôi bật chế độ khôi phục đơn giản thì điều này có giúp ích gì không?Cách thực hiện DELETE nhanh chóng nhiều dữ liệu từ một bảng lớn (máy chủ sql)
Trả lời
Sao chép các hàng bạn không muốn xóa vào bảng tạm thời bằng cách sử dụng select into và sau đó truncate bảng thay vì xóa. Sao chép các hàng trở lại vào bảng cũ. Hãy nhớ đến drop contraints trước tiên.
Nếu bạn có cột nhận dạng, sau khi thuê dữ liệu, hãy sử dụng một cái gì đó như thế này để đặt lại bảng.
declare @seed int
select @seed = max(identity_col)+1 from tableName
DBCC CHECKIDENT (orders, table_name, @seed)
Cho rằng bạn muốn xóa 90% hàng, có thể nhanh nhất là SELECT INTO 10% hàng bạn muốn giữ lại trong bảng mới.
Nếu bạn không thể sao chép phần còn lại để bàn khác, sau đó cắt và sao chép lại ...
... thả chỉ số là về điều duy nhất bạn có thể làm lập trình khôn ngoan. Trong trường hợp này, việc giảm chỉ mục và tái tạo chúng có thể hữu ích.
... hoặc nhận hệ thống phụ đĩa nhanh hơn, chủ yếu cho dữ liệu.
Chế độ khôi phục sẽ không trợ giúp - chế độ khôi phục cho biết nhật ký có thể xóa ngay sau khi cam kết (có thể ngầm), nhưng không có gì trong đó tránh các mục nhật ký bị ghi.
Thêm cờ IsDeleted (BIT)
, đặt thành 1 cho 90% đó và tạo chế độ xem trên bảng chỉ hiển thị các hàng có IsDeleted=0
.
Xóa luôn là a) thao tác tốn nhiều tài nguyên và b) phá hủy mọi khả năng giải trình - Tôi sẽ cố gắng tránh nó nếu có thể, vì cả hai lý do (hiệu suất và hủy dữ liệu). Thay vào đó, hãy sử dụng phương pháp "xóa mềm".
- 1. SQL 2005 - cách nhanh chóng để sao chép nhanh một cơ sở dữ liệu + dữ liệu
- 2. Máy chủ SQL - Bảng siêu dữ liệu
- 3. Máy chủ SQL - sao chép dữ liệu từ bảng dàn
- 4. Làm cách nào để truy cập dữ liệu trong nhiều tệp CSV lớn một cách nhanh chóng từ Perl?
- 5. Máy chủ SQL BẬT DELETE Kích hoạt
- 6. Máy chủ Sql DELETE và WITH khoản
- 7. Cách nhanh nhất để di chuyển từ máy chủ sql sang sqlite cho bộ dữ liệu lớn
- 8. Xóa số từ máy chủ chuỗi sql
- 9. Xem dữ liệu của bảng trong máy chủ sql 2008
- 10. Máy chủ SQL: Nhập cơ sở dữ liệu từ .mdf?
- 11. Di chuyển một cách hiệu quả các tập dữ liệu lớn giữa các bảng SQL Server?
- 12. Máy chủ SQL - thực hiện [SELECT] khóa [CẬP NHẬT]?
- 13. INSERT dữ liệu từ một bảng vào nhiều bảng
- 14. Máy chủ SQL: Cách thực hiện Rtrim trên tất cả các cột VARCHAR của một bảng
- 15. Lớp mảng C++ tốt để xử lý các mảng dữ liệu lớn một cách hiệu quả và nhanh chóng?
- 16. Cách nhanh nhất để xóa tất cả dữ liệu trong một bảng lớn
- 17. Máy chủ SQL - Thả và Tạo lại một Bảng - Truy cập Chặn Trong khi Thực hiện
- 18. Cách tạo dữ liệu ngẫu nhiên trong máy chủ SQL
- 19. Cập nhật Máy chủ SQL Sử dụng Nhiều Bảng
- 20. ADO.Net: Lấy định nghĩa bảng từ bảng máy chủ SQL
- 21. cư một MySQL với một loạt lớn các hàng một cách nhanh chóng
- 22. Cách tìm số cột của bất kỳ bảng nào trong bất kỳ cơ sở dữ liệu nào từ cơ sở dữ liệu chủ của máy chủ sql?
- 23. DELETE dữ liệu từ một bảng, tham gia thông qua hai bảng
- 24. Đọc một số lượng lớn tệp nhanh chóng
- 25. Máy chủ SQL: hiệu suất dữ liệu chuỗi thời gian
- 26. Làm thế nào để nhanh chóng chọn ngày DISTINCT từ trường Ngày/Giờ, SQL Server
- 27. Nhanh chóng sao chép một cơ sở dữ liệu sản xuất đến môi trường phát triển (SQL Server)
- 28. Cập nhật bảng cơ sở dữ liệu từ một bảng cơ sở dữ liệu SQL Server sang bảng cơ sở dữ liệu SQL Server khác?
- 29. Làm cách nào để chuyển đổi từ một kiểu dữ liệu tiền trong máy chủ SQL?
- 30. Làm thế nào để thêm một cột vào bảng máy chủ sql lớn
đẹp! Tôi có các cột nhận dạng nên sẽ phải đối phó với điều đó, nhưng đó là ok. – Rory
+1 - Điều này ít được đăng nhập ít nhất là 2005+ (không chắc chắn về các phiên bản trước) vì vậy nó phải siêu nhanh. Ghi nhớ thời gian cần thiết để xây dựng lại các chỉ mục. – JNK