Bài viết này tôi sẽ giúp anh em hiểu rõ bản chất câu lệnh Truncate và Delete, từ đó giải thích được trường hợp nào nên dùng Truncate, trường hợp nào nên dùng Delete
1. Trường hợp được xem xét trong bài toán này:
- Giả sử bạn cần xóa toàn bộ dữ liệu trong một bảng (có 10 triệu bản ghi chẳng hạn), bạn đang phân vân giữa Truncate và Delete thì nên lựa chọn câu lệnh nào?
- Ưu/ nhược điểm của từng loại là gì?
- Tại sao khi dùng Truncate thì thời gian thực hiện lại nhanh hơn sử dụng Delete?
2. Tìm hiểu bản chất của Truncate và Delete
2.1. Cơ sở dữ liệu phải làm gì khi gặp lệnh Delete
Trong trường hợp chúng ta muốn xóa toàn bộ dữ liệu của bản (trong ví dụ trên: bảng có 10 triệu bản ghi).
Câu lệnh Delete gửi tới hệ thống như sau:
DELETE FROM TRANSACTION_TABLE
Hệ thống không thực hiện xóa ngay các bản ghi như chúng ta nghĩ.
Trước khi thực hiện xóa các dữ liệu trong bảng, hệ thống cần đưa toàn bộ những dữ liệu này sang một “nơi lưu trữ mới”, gọi là UNDO.
Sau khi việc lưu trữ giữ liệu trong UNDO thành công, hệ thống mới thực hiện công việc “xóa” các dữ liệu trong bảng.
Tại sao lại vậy?
Cơ sở dữ liệu cần thực hiện việc chuyển sang UNDO để phục vụ cho mục đích ROLLBACK.
Sau khi bạn thực hiện câu lệnh DELETE thành công, nếu bạn muốn quay lại trạng thái của TABLE lúc trước khi DELETE, hệ thống sẽ lấy dữ liệu từ đâu để thực hiện việc này? Aha, nó sẽ dùng Undo.
2.2. Cơ sở dữ liệu phải làm gì khi gặp lệnh TRUNCATE
Câu lệnh TRUNCATE thuộc nhóm các lệnh DDL.
Khi chúng ta thực hiện câu lệnh thuộc nhóm DDL, chúng ta không thể thực hiện ROLLBACK.
Chính vì không cần thiết ROLLBACK, hệ thống xử lý lệnh TRUNCATE nhanh hơn rất nhiều lần so với lệnh DELETE (không phải chuyển bất kỳ dữ liệu nào sang vùng UNDO cả).
3. Nếu bạn muốn biết thêm việc tối ưu các câu lệnh DML (Insert, Update, Delete) hoặc câu lệnh Query (Select)
- 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.
4. Nếu bạn muốn xem video phân tích, demo của tôi
Bạn có thể theo dõi Series phân tích tối ưu SQL của tôi trên kênh youtube: https://www.youtube.com/@tranquochuywecommit/shorts
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. Nếu bạn là DEV và muốn toàn bộ những kinh nghiệm về tối ưu SQL của tôi, để trở nên KHÁC BIỆT so với các đồng nghiệp trên thị trường?
Hãy đọc về chương trình “Từ điển tối ưu 100x hiệu năng” tại đây: Click vào đây để tìm hiểu chương trình.
7. 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
