SQLite - VACUUM:整理您的數據庫

你好,未來的數據庫大師!今天,我們將深入探討SQLite的一個非常有意思的方面,這就是讓您的數據庫保持整潔有序。這就像給您的數字房子來一次徹底的春季大掃除!讓我們一起探索SQLite中的VACUUM世界。

SQLite - VACUUM

VACUUM是什麼?

在我們深入細節之前,讓我們先了解一下VACUUM是什麼。想像一下,您有一個書架(您的數據庫),上面滿滿的是書籍(您的數據)。隨著時間的推移,當您添加和刪除書籍時,您可能會留下空間或書籍亂序。VACUUM就像重新整理那個書架,移除空間,並使一切更加高效。

在SQLite術語中,VACUUM有助於通過以下方式優化您的數據庫:

  1. 復用未使用的空間
  2. 重新整理數據庫文件
  3. 有可能提高查詢性能

現在,讓我們探討兩種主要的方法來進行這種優化:手動VACUUM和自動VACUUM。

手動VACUUM

基础知識

手動VACUUM就像在您感覺房間太亂時決定清理房間一樣。您需要自己發起它,但它讓您控制清理發生的時間。

以下是您如何執行手動VACUUM:

VACUUM;

是的,這就是那麼簡單!只需一個命令,SQLite就會開始整理您的數據庫。

當使用手動VACUUM

您可能想在手動VACUUM的情況如下:

  1. 刪除大量數據後
  2. 在您的數據庫結構發生重大變化後
  3. 當您發現數據庫文件大小遠遠大於它包含的實際數據時

示例情景

讓我們通過一個實際示例來看看手動VACUUM是如何工作的。

-- 創建一個示例表
CREATE TABLE books (
id INTEGER PRIMARY KEY,
title TEXT,
author TEXT
);

-- 插入一些數據
INSERT INTO books (title, author) VALUES
('1984', 'George Orwell'),
('To Kill a Mockingbird', 'Harper Lee'),
('Pride and Prejudice', 'Jane Austen');

-- 檢查數據庫的大小(您會在SQLite外部,在您的文件系統中做這件事)
-- 假設它是20KB

-- 現在,讓我們刪除一些數據
DELETE FROM books WHERE id = 2;

-- 文件大小可能仍然是20KB

-- 讓我們VACUUM
VACUUM;

-- 現在如果您再次檢查文件大小,它應該會小一些!

在這個示例中,即使刪除數據後,文件大小也沒有立即變化。但是運行VACUUM後,SQLite重新整理了數據庫,可能會減少其大小。

自動VACUUM

理解自動VACUUM

自動VACUUM就像有一個小機器人,每次您弄亂房間時,它就自動清理一點。這是一個當啟用時會自動回收空間的功能,當您刪除數據時。

啟用自動VACUUM

要啟用自動VACUUM,您需要在創建數據庫時設置它。這樣做:

PRAGMA auto_vacuum = FULL;

auto_vacuum有三種模式:

模式 描述
NONE 0 自動vacuum禁用(默認)
FULL 1 在每次交易後自動vacuum
INCREMENTAL 2 渐進式vacuum,將工作分散到交易中

自動VACUUM的示例

讓我們看看自動VACUUM是如何工作的示例:

-- 啟用自動VACUUM(在創建任何表之前做這件事)
PRAGMA auto_vacuum = FULL;

-- 創建我們的books表
CREATE TABLE books (
id INTEGER PRIMARY KEY,
title TEXT,
author TEXT
);

-- 插入一些數據
INSERT INTO books (title, author) VALUES
('The Great Gatsby', 'F. Scott Fitzgerald'),
('Moby-Dick', 'Herman Melville'),
('War and Peace', 'Leo Tolstoy');

-- 刪除一條記錄
DELETE FROM books WHERE id = 2;

-- 有自動VACUUM,空間會自動回收!
-- 沒有需要手動運行VACUUM

在這種情況下,當您刪除記錄時,自動VACUUM會自動整理,無需您額外操作。

選擇手動和自動VACUUM之間

那麼,應該選擇哪一種呢?這取決於您的需求:

  1. 手動VACUUM很棒,如果:
  • 您想要完全控制優化的時間
  • 您的數據庫不經常變化
  • 您對在VACUUM之間可能會有較大的文件大小沒有問題
  1. 自動VACUUM很理想,如果:
  • 您想要“設置並忘記”的方法
  • 您的數據庫經常變化
  • 保持文件大小最小化始終很重要

記住,這就像在您覺得有必要時自己清理房間(手動VACUUM)和有一個每天運行一點的機器人清潔(自動VACUUM)之間選擇。

結論

好了,各位!我們已經探索了SQLite中的VACUUM世界,從手動清理到自動整理。無論您選擇自己成為數據庫整潔的主人還是讓SQLite自動處理,您現在都有保持數據庫運行順暢和高效的知识。

記住,一個整潔的數據庫是一個快樂的數據庫!所以勇往直前,帶著信心進行VACUUM。誰知道數據庫維護可以如此...敢問我能否說它...有趣?祝您編程愉快,未來的數據大師!

Credits: Image by storyset