II. GIẢI PHÁP:
1. Xóa dữ liệu dùng TRUNCATE
- TRUNCATE nhanh chóng xóa toàn bộ dữ liệu trong 1 table bằng cách thu hồi không gian đĩa được cấp phát cho những trang dữ liệu của table (SQL lưu dữ liệu thành nhiều trang).
- Những record bị xóa khi dùng TRUNCATE không thể roll back, vì TRUNCATE chỉ log lại quá trình giải phóng không gian đĩa, điều này làm TRUNCATE chạy nhanh hơn DELETE.
- Hoàn toàn không thể dùng ‘WHERE’ để giới hạn số dòng bị xóa, mà là tất cả số dòng trong 1 bảng sẽ bị xóa.
- Lợi ích của TRUNCATE là ngoài vệc xóa toàn bộ 1 table, nó còn reset lại cột Identity trở về giá trị ban đầu, và không gian lưu trữ được trả về cho hệ thống. Ví dụ bạn có 1 table với 1 cột Identity bắt đầu từ 1 đến 100
- Sau khi dùng TRUNCATE, bạn insert 1 dòng mới, thì cột Indentity sẽ bắt đầu từ 1.
- Còn nếu bạn dùng DELETE thì cột Identity sẽ bắt đầu từ 101.
- Ngoài ra, nếu những table muốn xóa được cấu hình Replication hay Log Shipping, bạn không thể dùng TRUNCATE.
- Nếu 1 table có khóa ngoại (Foreign key), bạn phải drop constraint, dùng lệnh TRUNCATE, rồi kéo lại Relationship cho table đó.
2. Xóa dữ liệu dùng DELETE
- Dùng DELETE xóa nhiều dòng cùng lúc, từng dòng bị xóa sẽ được ghi vào Transaction log. Điều này làm DELETE chậm hơn TRUNCATE.
- Mặc dù tiêu tốn nhiều resource và lock, những transaction này có thể được Roll back nếu cần thiết.
- Ta có thể dùng ‘WHERE’ để giới hạn số dòng bị xóa.
- Không như TRUNCATE, nếu table có khóa ngoại, bạn vẫn xóa được dễ dàng.
Quang Vinh
mai.quangvinh@sqlvn.com
0 comments:
Post a Comment