SQLite - VACUUM: Dọn dẹp cơ sở dữ liệu của bạn

Xin chào các nhà pháp sư cơ sở dữ liệu tương lai! Hôm nay, chúng ta sẽ cùng nhau khám phá một khía cạnh thú vị của SQLite, đó là việc giữ cho cơ sở dữ liệu của bạn干净 và ngăn nắp. Đó giống như việc dọn dẹp nhà cửa vào mùa xuân! Hãy cùng tìm hiểu về thế giới VACUUM trong SQLite.

SQLite - VACUUM

VACUUM là gì?

Trước khi chúng ta đi vào chi tiết, hãy hiểu rõ VACUUM là gì. Hãy tưởng tượng bạn có một kệ sách (cơ sở dữ liệu của bạn) đầy sách (dữ liệu của bạn). Qua thời gian, khi bạn thêm và xóa sách, bạn có thể sẽ gặp phải những khoảng trống hoặc sách bị lung tung. VACUUM giống như việc sắp xếp lại kệ sách đó, loại bỏ khoảng trống và làm cho mọi thứ hiệu quả hơn.

Trong thuật ngữ SQLite, VACUUM giúp tối ưu hóa cơ sở dữ liệu của bạn bằng cách:

  1. Khôi phục không gian không sử dụng
  2. Phân mảnh lại tệp cơ sở dữ liệu
  3. Nâng cao hiệu suất truy vấn

Bây giờ, hãy cùng khám phá hai cách chính để thực hiện tối ưu hóa này: VACUUM thủ công và VACUUM tự động.

VACUUM thủ công

Cơ bản

VACUUM thủ công giống như việc bạn quyết định dọn dẹp phòng khi bạn cảm thấy nó quá bẩn. Bạn phải tự khởi động nó, nhưng nó cho bạn kiểm soát khi dọn dẹp xảy ra.

Dưới đây là cách bạn có thể thực hiện VACUUM thủ công:

VACUUM;

Đúng vậy! Chỉ cần một lệnh, và SQLite sẽ bắt đầu dọn dẹp cơ sở dữ liệu của bạn.

Khi nào nên sử dụng VACUUM thủ công

Bạn có thể muốn sử dụng VACUUM thủ công trong các tình huống như:

  1. Sau khi xóa một lượng lớn dữ liệu
  2. Sau khi thực hiện thay đổi lớn đối với cấu trúc cơ sở dữ liệu của bạn
  3. Khi bạn nhận thấy kích thước tệp cơ sở dữ liệu lớn hơn nhiều so với dữ liệu thực tế nó chứa

Ví dụ tình huống

Hãy cùng qua một ví dụ thực tế để xem VACUUM thủ công trong hành động.

-- Tạo một bảng mẫu
CREATE TABLE books (
id INTEGER PRIMARY KEY,
title TEXT,
author TEXT
);

-- Chèn một số dữ liệu
INSERT INTO books (title, author) VALUES
('1984', 'George Orwell'),
('To Kill a Mockingbird', 'Harper Lee'),
('Pride and Prejudice', 'Jane Austen');

-- Kiểm tra kích thước của cơ sở dữ liệu (bạn sẽ làm này ngoài SQLite, trong hệ thống tệp của bạn)
-- Giả sử nó là 20KB

-- Bây giờ, hãy xóa một số dữ liệu
DELETE FROM books WHERE id = 2;

-- Kích thước tệp có thể vẫn là 20KB

-- Hãy thực hiện VACUUM
VACUUM;

-- Bây giờ nếu bạn kiểm tra kích thước tệp lần nữa, nó nên nhỏ hơn!

Trong ví dụ này, ngay cả sau khi xóa dữ liệu, kích thước tệp không thay đổi ngay lập tức. Nhưng sau khi chạy VACUUM, SQLite đã tổ chức lại cơ sở dữ liệu, có thể giảm kích thước của nó.

VACUUM tự động

Hiểu về VACUUM tự động

VACUUM tự động giống như việc có một robot nhỏ tự động dọn dẹp phòng của bạn từng chút một mỗi khi bạn làm bẩn. Đây là tính năng tự động khôi phục không gian khi bạn xóa dữ liệu.

Bật VACUUM tự động

Để bật VACUUM tự động, bạn cần thiết lập nó khi bạn lần đầu tiên tạo cơ sở dữ liệu. Dưới đây là cách thực hiện:

PRAGMA auto_vacuum = FULL;

Có ba chế độ cho auto_vacuum:

Chế độ Giá trị Mô tả
NONE 0 Tắt auto-vacuum (mặc định)
FULL 1 Tự động vacuum sau mỗi giao dịch
INCREMENTAL 2 Vacuum từng bước, phân phối công việc qua các giao dịch

Ví dụ VACUUM tự động trong hành động

Hãy xem VACUUM tự động hoạt động như thế nào với một ví dụ:

-- Bật VACUUM tự động (làm này trước khi tạo bất kỳ bảng nào)
PRAGMA auto_vacuum = FULL;

-- Tạo bảng books của chúng ta
CREATE TABLE books (
id INTEGER PRIMARY KEY,
title TEXT,
author TEXT
);

-- Chèn một số dữ liệu
INSERT INTO books (title, author) VALUES
('The Great Gatsby', 'F. Scott Fitzgerald'),
('Moby-Dick', 'Herman Melville'),
('War and Peace', 'Leo Tolstoy');

-- Xóa một bản ghi
DELETE FROM books WHERE id = 2;

-- Với VACUUM tự động, không gian được tự động khôi phục!
-- Không cần phải chạy VACUUM thủ công

Trong trường hợp này, khi bạn xóa bản ghi, VACUUM tự động sẽ tự động dọn dẹp, khôi phục không gian mà không cần bạn làm thêm gì.

Chọn giữa VACUUM thủ công và tự động

Vậy, bạn nên chọn cái nào? Điều đó tùy thuộc vào nhu cầu của bạn:

  1. VACUUM thủ công rất tốt nếu:
  • Bạn muốn kiểm soát hoàn toàn khi tối ưu hóa xảy ra
  • Cơ sở dữ liệu của bạn không thay đổi thường xuyên
  • Bạn chấp nhận kích thước tệp có thể lớn hơn giữa các lần VACUUM
  1. VACUUM tự động lý tưởng nếu:
  • Bạn muốn một cách tiếp cận "thiết lập và quên đi"
  • Cơ sở dữ liệu của bạn thay đổi thường xuyên
  • Việc giữ kích thước tệp nhỏ nhất có thể tại mọi thời điểm là quan trọng

Nhớ rằng, điều này giống như việc bạn chọn giữa tự mình dọn dẹp phòng khi bạn cảm thấy cần thiết (VACUUM thủ công) hoặc có một robot hút bụi tự động chạy hàng ngày (VACUUM tự động).

Kết luận

Và đó là tất cả, các bạn! Chúng ta đã khám phá thế giới VACUUM trong SQLite, từ việc dọn dẹp thủ công đến tự động. Dù bạn chọn làm chủ việc dọn dẹp cơ sở dữ liệu của mình hay để SQLite tự động quản lý, bạn现在已经 có kiến thức để giữ cho cơ sở dữ liệu của mình chạy mượt mà và hiệu quả.

Nhớ rằng, một cơ sở dữ liệu ngăn nắp là một cơ sở dữ liệu hạnh phúc! Hãy tiến lên và VACUUM với niềm tin. Ai ngờ rằng việc bảo trì cơ sở dữ liệu có thể thú vị đến thế? Chúc các bạn may mắn trong việc mã hóa, những nhà quản lý dữ liệu tương lai!

Credits: Image by storyset