【问题标题】:change sqlite file size after "DELETE FROM table"在“DELETE FROM table”之后更改 sqlite 文件大小
【发布时间】:2020-07-28 18:11:58
【问题描述】:

我正在使用 sqlite3 文件。

首先,我进入了比较大的数据库,文件大小在 100 mb 左右。

比我做的

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

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

删除内容时如何更改sqlite文件大小?

【问题讨论】:

    标签: sqlite


    【解决方案1】:

    您要查找的命令是vacuum。还有一个pragma 可以打开自动吸尘。

    来自文档:

    当一个对象(表、索引、触发器、 或视图)从数据库中删除, 它留下了空白空间。这个 空白空间将在下一个重复使用 将新信息添加到 数据库。但与此同时, 数据库文件可能大于 绝对必要。还有,经常 插入、更新和删除可以 导致数据库中的信息 变得支离破碎 整个数据库文件,而不是 而不是聚集在一个地方。

    VACUUM 命令清除主 通过将其内容复制到数据库 临时数据库文件和重新加载 原始数据库文件来自 复制。这消除了免费页面, 将表数据对齐为连续的, 否则清理数据库 文件结构。

    【讨论】:

    • 有没有办法恢复尚未覆盖的已删除表行?
    • VACUUMing 数据库需要 两倍 内部/外部内存中原始数据库文件的大小。阅读SQLite Query Language: VACUUM 了解更多信息。
    【解决方案2】:

    你可以这样做

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

    文件大小会改变。

    【讨论】:

      【解决方案3】:

      清理数据库 SQLite 有两个专门用于清理的命令——重新索引和清理。

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

      reindex collation_name;
      reindex table_name|index_name;
      

      真空有以下形式:

      VACUUM;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-08
        相关资源
        最近更新 更多