SQLite - VACUUM

Lệnh VACUUM dọn dẹp cơ sở dữ liệu chính bằng cách sao chép nội dung của nó vào tệp cơ sở dữ liệu tạm thời và tải lại tệp cơ sở dữ liệu gốc từ bản sao. Điều này giúp loại bỏ các trang miễn phí, căn chỉnh dữ liệu bảng để liền kề và làm sạch cấu trúc tệp cơ sở dữ liệu.

Lệnh VACUUM có thể thay đổi ROWID của các mục nhập trong bảng không có KHÓA CHÍNH INTEGER rõ ràng. Lệnh VACUUM chỉ hoạt động trên cơ sở dữ liệu chính. Không thể VACUUM tệp cơ sở dữ liệu đính kèm.

Lệnh VACUUM sẽ không thành công nếu có một giao dịch đang hoạt động. Lệnh VACUUM là lệnh cấm đối với cơ sở dữ liệu trong bộ nhớ. Khi lệnh VACUUM xây dựng lại tệp cơ sở dữ liệu từ đầu, VACUUM cũng có thể được sử dụng để sửa đổi nhiều tham số cấu hình cơ sở dữ liệu cụ thể.

VACUUM thủ công

Sau đây là một cú pháp đơn giản để đưa ra lệnh VACUUM cho toàn bộ cơ sở dữ liệu từ dấu nhắc lệnh:

$sqlite3 database_name "VACUUM;"

Bạn cũng có thể chạy VACUUM từ lời nhắc SQLite như sau:

sqlite> VACUUM;

Bạn cũng có thể chạy VACUUM trên một bảng cụ thể như sau:

sqlite> VACUUM table_name;

Auto-VACCUM

SQLite Auto-VACUUM không làm giống như VACUUM thay vì nó chỉ di chuyển các trang miễn phí đến cuối cơ sở dữ liệu do đó làm giảm kích thước cơ sở dữ liệu. Làm như vậy nó có thể phân mảnh đáng kể cơ sở dữ liệu trong khi VACUUM đảm bảo chống phân mảnh. Do đó, Auto-VACUUM chỉ giữ cho cơ sở dữ liệu nhỏ.

Bạn có thể bật / tắt tính năng tự động hút bụi của SQLite bằng các pragmas sau chạy tại lời nhắc SQLite:

sqlite> PRAGMA auto_vacuum = NONE; -- 0 means disable auto vacuum
sqlite> PRAGMA auto_vacuum = FULL; -- 1 means enable full auto vacuum
sqlite> PRAGMA auto_vacuum = INCREMENTAL; -- 2 means enable incremental vacuum

Bạn có thể chạy lệnh sau từ dấu nhắc lệnh để kiểm tra cài đặt tự động hút bụi -

$sqlite3 database_name "PRAGMA auto_vacuum;"