2010-01-27 60 views
41

我正在使用sqlite3文件。在「DELETE FROM TABLE」後更改sqlite文件大小

首先,我輸入了比較大的數據庫,文件大小約爲100 mb。

比我做

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

,進入該數據庫的只是一小部分。但文件大小仍爲100 MB。

刪除內容時應該如何更改sqlite文件大小?

回答

71

您正在查找的命令是vacuum。還有一個pragma打開自動吸塵。

從文檔:

當一個對象(表,索引,觸發器, 或視圖)被從數據庫中刪除, 它留下空的空間。這個 空的空間將被重用,下一個 時間的新信息被添加到 數據庫中。但與此同時, 數據庫文件可能大於 嚴格必要。另外,頻繁使用 插入,更新和刪除可以使 導致數據庫 中的信息變得碎片化 - 在整個數據庫文件中將 劃破,而不是在羣集在一起的 。

真空命令通過複製其內容到 臨時數據庫文件和重裝 從 拷貝原始數據庫文件清潔主 數據庫。這消除了空閒頁面, 對齊表格數據是連續的, 和否則清理數據庫 文件結構。

+0

有沒有辦法恢復未被覆蓋的已刪除表格行? – Blauhirn 2016-05-23 12:01:58

-2

清理數據庫 SQLite有兩個命令設計用於清理reindex和vacuum。 reindex用於重建索引。它有兩種形式: reindex collat​​ion_name; reindex table_name | index_name;

12

你可以做到這一點

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

和文件大小將被改變。

相關問題