Đây là chuỗi bài viết giải đáp các vấn đề liên quan đến tối ưu SQL. Bài viết này sẽ giải đáp câu hỏi liên quan đến kỹ thuật sử dụng Soft Delete của các anh em lập trình.
1. Đây là các câu hỏi sau khi các bạn đọc về bài “So sánh hiệu năng Truncate và Delete”
Link bài viết trước anh em có thể xem tại đây: https://wecommit.com.vn/so-sanh-truncate-va-delete/
Hai câu hỏi gửi tới tôi:
- Câu hỏi 1: “Làm dev toàn sử dụng soft delete chứ có bao giờ được phép xóa dùng Delete đâu”? (ý của bạn là: trong quá trình phát triển dự án, chúng ta không sử dụng lệnh DELETE, mà thay đó sẽ sử dụng một kỹ thuật khác – bên dưới tôi sẽ phân tích chi tiết hơn)
- Câu hỏi 2: Sử dụng TRUNCATE thì có bị mất Index trên bảng không
2. Câu hỏi : “Làm dev toàn sử dụng soft delete chứ có bao giờ được phép xóa dùng Delete đâu”?
Trả lời:
Để tất cả mọi người có thể hình dung được rõ bối cảnh và nội dung câu hỏi, tôi có một số thông tin thêm.
2.1. Soft Delete là gì?
Soft Delete là một cách thức xóa dữ liệu của anh em lập trình. Bản chất các bản ghi không đề được xóa (khác hoàn toàn với việc dùng câu lệnh DELETE), mà chúng sẽ được cập nhật một trạng thái để “ứng dụng” có thể hiểu rằng bản ghi đó đã bị xóa.
Ví dụ:
Tôi có một bảng lưu thông tin tên là EMPLOYEES như sau
ID | NAME | SALARY | ADD |
100 | Tran Quoc Huy | 5000 | Ha Noi |
101 | Wecommit | 10000 | Ha Noi |
102 | Tran Dinh Huy | 4500 | Nam Dinh |
103 | Tran Duc Tuan | 4000 | Ha Nam |
Khi thực hiện giải pháp Soft Delete, chúng ta sẽ thực hiện thêm 1 cột vào bảng bên trên (cột này với mục tiêu đánh dấu các bản ghi bị xóa). Giả sử cột đánh dấu thông tin này gọi là IS_DELETE. Cột này bình thường giá trị sẽ là 0 (nếu bản ghi không bị xóa), và nhận giá trị 1 khi bản ghi đó bị đánh dấu là đã xóa.
Bảng dữ liệu của chúng ta bây giờ như sau
ID | NAME | SALARY | ADD | IS_DELETE |
100 | Tran Quoc Huy | 5000 | Ha Noi | 0 |
101 | Wecommit | 10000 | Ha Noi | 0 |
102 | Tran Dinh Huy | 4500 | Nam Dinh | 0 |
103 | Tran Duc Tuan | 4000 | Ha Nam | 0 |
Khi chúng ta muốn xóa bản ghi ID =102, ứng dụng sẽ thực hiện lệnh UPDATE, thay vì sử dụng lệnh DELETE. (Sử dụng cách thức Soft Delete)
UPDATE EMPLOYEES SET IS_DELETE=1 WHERE ID=102
Dữ liệu trong bảng lúc này như sau
ID | NAME | SALARY | ADD | IS_DELETE |
100 | Tran Quoc Huy | 5000 | Ha Noi | 0 |
101 | Wecommit | 10000 | Ha Noi | 0 |
102 | Tran Dinh Huy | 4500 | Nam Dinh | 1 |
103 | Tran Duc Tuan | 4000 | Ha Nam | 0 |
2.2. Các dự án toàn sử dụng Soft Delete, có phải không?
Với các hệ thống lớn, tôi thường thiết kế chiến lược vòng đời dữ liệu để đảm bảo tính an toàn và hiệu năng.
Trong các hệ thống này thực hiện việc XÓA CỨNG (DELETE hoặc TRUNCATE đối với Partition Table) chứ không sử dụng Soft Delete.
Các bạn có thể xem danh sách những dự án mà tôi đã trực tiếp thực hiện tối ưu tại đây: https://wecommit.com.vn/du-an/
2.3. Chiến lược vòng đời dữ liệu là gì và thực tế chúng được sử dụng như thế nào?
Đây là một phần trong các kiến thức dành riêng cho các học viên nhóm đặc quyền.
Các bạn quan tâm có thể tìm hiểu chương trình Từ điển tối ưu 100x hiệu năng của chúng tôi tại đây: https://wecommit.com.vn/tu-dien-toi-uu-100x-hieu-nang/
3. Câu hỏi: Sử dụng TRUNCATE thì các Index trong bảng có bị xóa đi không?
Trả lời:
- Khi sử dụng TRUNCATE: các Index của bảng vẫn còn nguyên
4. Nếu bạn muốn biết thêm việc về tối ưu SQL:
- Nếu bạn cần tối ưu câu lệnh Insert, bạn có thể đọc bài viết mà tôi đã từng chia sẻ tại đây: Kỹ thuật tối ưu câu lệnh Insert
- Tìm hiểu cách thức một câu lệnh SQL hoạt động, để có thể làm chủ hoàn toàn kỹ thuật tối ưu SQL: Hãy đọc bài viết này.
- Nếu bạn muốn đọc các bài viết liên quan đến Index:
5. Nếu bạn muốn biết câu trả lời cho câu hỏi “Tối ưu SQL bắt đầu từ đâu”?
Bạn có thể xem Video tôi chia sẻ về vấn đề này.
Trong phần chia sẻ này bạn sẽ biết được:
- Các thách thức phải đối mặt khi bạn muốn làm chủ kỹ năng tối ưu SQL
- Những sai lầm phổ biến
- Và các bí mật
Bạn có thể xem chi tiết tại đây: Click vào đây.
6. Thông tin tác giả
Chào các bạn, tôi là Trần Quốc Huy – Founder Wecommit và đồng thời là tác giả của chương trình Từ điển tối ưu 100x hiệu năng.
Tôi chỉ tập trung vào 1 lĩnh vực duy nhất hơn 10 năm nay: Tối ưu cơ sở dữ liệu.
Các bạn có thể liên hệ với tôi qua các kênh sau
Facebook cá nhân của tôi: https://www.facebook.com/tran.q.huy.71/
Youtube: https://www.youtube.com/channel/UCtsYzL7iN7rBCPnkjYp4XYw