手動壓縮Sqlite解決刪除資料後db檔案大小不變

最近在處理一個小型專案,在測試期間對Sqlite讀寫近千萬筆的資料後,當測試完畢後整個Table drop。

DB檔案占用磁碟大小卻沒有任何改變,讓我非常困惑到底發生甚麼事情。

SQLite 官方文件裡有完整概念說明,當sql資料刪除後並不會把資源還回去,而是會記錄到一個閒置空間的表單,如果有資料要再次寫入會優先利用這些空間。

當然可以在建立DB時設定自動回收的模式,但有機會造成DB更加碎片化而導致效能低落。

故直接使用手動方式執行命令,讓DB重建資料順序及空間的方式來進行處理。

執行壓縮指令VACUUM

提供兩種方式一種是直接登入資料庫,下指令執行命令。但個人習慣把東西寫成腳本後,定時排程執行以後有需要也可以引用在其他程式中使用。

/*  
在SQL中執行此指令即可
*/
VACUUM
import sqlite3

# .\sql_data.db  要改成自己的DB路徑
ipdata_connection = sqlite3.connect('.\sql_data.db')
ip_cur = ipdata_connection.cursor()
ip_cur.execute("VACUUM;")
ipdata_connection.commit()
ipdata_connection.close()

參考來源:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

返回頂端