2010-01-27 25 views
41

Tôi đang làm việc với tệp sqlite3.thay đổi kích thước tệp sqlite sau "DELETE FROM table"

Trước tiên, tôi đã nhập cơ sở dữ liệu tương đối lớn, kích thước tệp khoảng 100 mb.

Thần I làm

$db->exec("DELETE FROM table"); 

và nhập chỉ là một phần nhỏ của cơ sở dữ liệu đó. Nhưng kích thước tập tin vẫn còn 100 mb.

Bạn nên làm gì để thay đổi kích thước tệp sqlite khi xóa nội dung đó?

Trả lời

71

Lệnh bạn đang tìm kiếm là vacuum. Ngoài ra còn có pragma để bật tự động hút bụi.

Từ các tài liệu:

Khi một đối tượng (bảng, chỉ mục, kích hoạt, hoặc xem) được giảm từ cơ sở dữ liệu, thùng còn lại những khoảng trống. Không gian trống này sẽ được sử dụng lại thời gian tiếp theo thông tin mới được thêm vào cơ sở dữ liệu . Nhưng trong thời gian chờ đợi, tệp cơ sở dữ liệu có thể lớn hơn cần thiết. Ngoài ra, thường xuyên chèn, cập nhật và xóa có thể làm cho thông tin trong cơ sở dữ liệu trở nên bị phân mảnh - bị rách ra trên tất cả các tệp cơ sở dữ liệu thay vì hơn được nhóm lại với nhau ở một nơi.

Lệnh CHÂN KHÔNG làm sạch cơ sở dữ liệu chính bằng cách sao chép nội dung của nó vào một tập tin cơ sở dữ liệu tạm thời và tải lại tập tin cơ sở dữ liệu ban đầu từ các 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 để tiếp giáp, và dọn dẹp cơ sở dữ liệu cấu trúc tệp.

+0

có cách nào để khôi phục các hàng trong bảng chưa bị xóa không? – Blauhirn

-2

Vệ sinh cơ sở dữ liệu SQLite có hai lệnh được thiết kế để làm sạch — reindex và chân không. reindex được sử dụng để xây dựng lại các chỉ mục. Nó có hai dạng: reindex collation_name; reindex table_name | index_name;

12

Bạn có thể làm điều này

$db->exec("DELETE FROM table"); 
$db->exec("vacuum"); 

và kích thước tập tin sẽ được thay đổi.

Các vấn đề liên quan