2012-02-10 24 views
0

如果我看在我的數據庫的數據庫設置(使用SQLite經理)我有16。freelist_count根據this source自由列表計數爲什麼我的SQLite數據庫中有未使用的頁面?

未使用的網頁數據庫中的文件數量

未使用的頁面是什麼意思,爲什麼頁面沒有被使用? freelist數大於零是不好的?我能做些什麼來將數量減少到零?

回答

2

SQLite FAQ

(12)我刪除了大量的數據,但數據庫文件沒有得到任何較小。這是一個錯誤?

號當您從一個SQLite數據庫中刪除信息,未使用的 磁盤空間將被添加到一個內部的「免費清單」,並再利用於下一 一次插入數據。磁盤空間不會丟失。但是它也不是 返回到操作系統。

如果刪除大量數據並想縮小數據庫文件,請運行 VACUUM命令。 VACUUM將從頭開始重建數據庫。 這將使數據庫保留一個空的空閒列表和一個文件,該文件的大小最小。但是,請注意,VACUUM可能需要一些時間運行(在開發SQLite的Linux機器上,每兆字節大約半秒/ ),它可以使用多達兩倍的臨時磁盤空間作爲原始文件在跑。

從SQLite版本3.1開始,使用VACUUM命令 的替代方法是auto-vacuum模式,該模式使用auto_vacuum編譯指示來啓用。

有一些免費的網頁沒有什麼不好,除非他們佔用大量的空間。取決於您的應用程序的需求,由您決定在哪裏結束「沒什麼不好」並啓動「重要」。

+0

如果我輸入'VACUUM;'數據庫從4.3 MB增加到接近6 MB。你知道爲什麼嗎?後續問題:我應該何時使用'VACUUM'命令?每次「刪除」後? – testing 2012-02-10 12:57:41

+0

這裏我找到了一些很好的鏈接:['VACUUM'](http://www.sqlite.org/lang_vacuum.html)和['AUTO_VACUUM'](http://www.sqlite.org/pragma.html#pragma_auto_vacuum )。 – testing 2012-02-10 13:01:16

+0

@testing您是否等待它結束?它在運行時使用更多空間。 – hamstergene 2012-02-10 13:01:44

相關問題