跳至主要內容
CJCJ Kuo

全站文章搜尋

輸入關鍵字即刻在靜態索引中快速搜尋
↑↓ 導航 · Enter 選取前往獨立搜尋頁 →
手動壓縮Sqlite解決刪除資料後db檔案大小不變
資訊技術••約 1 分鐘•298 字

手動壓縮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()

參考來源:

查看此系列所有文章 →
CJ Kuo (郭仕杰)

CJ Kuo (郭仕杰)

創辦人兼主筆

熱愛軟體架構、DevOps、系統調優與新技術探索的工程實踐者,也會寫寫投資和生活。

獨立技術專刊推播

訂閱技術電子報

有新文章發布時寄送到您的信箱,不發送垃圾信。