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', '乔治·奥威尔'),
('杀死一只知更鸟', '哈珀·李'),
('傲慢与偏见', '简·奥斯汀');

-- 检查数据库大小(在SQLite外部,即在您的文件系统中进行)
-- 假设它是20KB

-- 现在,删除一些数据
DELETE FROM books WHERE id = 2;

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

-- 让我们执行VACUUM
VACUUM;

-- 现在再次检查文件大小,它应该变小了!

在这个示例中,即使删除了数据,文件大小也没有立即改变。但是执行VACUUM后,SQLite重新整理了数据库,可能会减小其大小。

自动VACUUM

理解自动VACUUM

自动VACUUM就像是一个小机器人,每次您弄乱房间时,它都会自动清理一点。这是一个特性,当启用时,会在删除数据时自动回收空间。

启用自动VACUUM

要启用自动VACUUM,您需要在创建数据库时进行设置。以下是如何操作:

PRAGMA auto_vacuum = FULL;

自动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
('了不起的盖茨比', 'F. 斯科特·菲茨杰拉德'),
('白鲸', '赫尔曼·梅尔维尔'),
('战争与和平', '列夫·托尔斯泰');

-- 删除一条记录
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