在“从表删除”之后更改sqlite文件的大小


73

我正在使用sqlite3文件。

首先,我进入一个相对较大的数据库,文件大小约为100 mb。

比我做的

$db->exec("DELETE FROM table");

并只输入了该数据库的一小部分。但是文件大小仍然为100 mb。

删除sqlite文件的内容时应如何更改?

Answers:


119

您要查找的命令是vacuum。还有一个杂项可以打开自动抽真空功能。

从文档中:

当从数据库中删除对象(表,索引,触发器或视图)时,它将留下空白空间。下次将新信息添加到数据库时,将重新使用此空白空间。但是与此同时,数据库文件可能大于严格所需的文件。而且,频繁的插入,更新和删除操作可能会导致数据库中的信息变得碎片化-在整个数据库文件中全部被划破,而不是在一处聚集在一起。

VACUUM命令通过将主数据库的内容复制到临时数据库文件并从副本中重新加载原始数据库文件来清理主数据库。这样可以消除空闲页面,将表数据对齐为连续数据,否则可以清理数据库文件结构。


2
有没有办法还原尚未覆盖的已删除表行?
phil294

2
VACUUM数据库所需的大小是内部/外部存储器中原始数据库文件大小两倍。阅读SQLite查询语言:VACUUM以了解更多信息。
Roshana Pitigala,

42

你可以这样做

$db->exec("DELETE FROM table");
$db->exec("vacuum");

并且文件大小将被更改。


-3

清洁数据库SQLite有两个用于清洁的命令-重新索引和真空。

reindex用于重建索引。它有两种形式:

reindex collation_name;
reindex table_name|index_name;

真空具有以下形式:

VACUUM;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.