如何缩小sqlite数据库?

PPS*_*ein 16 java sqlite android

完成将我的所有数据存储到sqlite后,它已经达到14 MB.这就是为什么我担心有些人无法从连接缓慢区域下载我的应用程序.有没有办法缩小sqlite数据库?

Hot*_*cks 24

你试过VACUUM吗?

VACUUM命令重建整个数据库.应用程序可能会执行此操作有几个原因:

  • 除非SQLite以"auto_vacuum = FULL"模式运行,否则当从数据库文件中删除大量数据时,它会留下空白空间或"空闲"数据库页.这意味着数据库文件可能比严格必要的大.运行VACUUM以重建数据库会回收此空间并减小数据库文件的大小.
  • 频繁的插入,更新和删除可能导致数据库文件碎片化 - 单个表或索引的数据散布在数据库文件周围.运行VACUUM可确保每个表和索引在数据库文件中大部分连续存储.在某些情况下,VACUUM还可以减少数据库中部分填充页面的数量,进一步减小数据库文件的大小......

VACUUM命令的工作原理是将数据库的内容复制到临时数据库文件中,然后使用临时文件的内容覆盖原始文件.覆盖原始文件时,使用回滚日志或预写日志 WAL文件,就像使用任何其他数据库事务一样.这意味着当VACUUMing数据库时,在可用磁盘空间中需要的数量是原始数据库文件的两倍...

  • 您可以直接在查询窗口中运行“VACUUM;” (9认同)
  • @ElgsQianChen-我建议将其作为SQL语句进行。 (2认同)
  • 运行以下命令:sqlite3 /path/to/your/db/foo.db'VACUUM;' (2认同)

Jav*_*ier 11

一些提示:

  • SQLite有点懒于回收未使用的空间; 使用VACUUM命令或自动真空模式.

  • 数据库格式可以提高空间效率,从而实现快速访问.如果你只是转储数据内容,无论是作为SQL转储还是只是每个数据库表的CVS文件,你可能会得到更小的文件.

  • 使用数据库文件或纯数据,尝试压缩它们.


Anu*_*pam 7

将@Tono Nam 的评论放入答案中。具有完整语法的示例总是非常有帮助的。

在命令行中运行以下命令来使用该vacuum命令:

sqlite3 /path/to/your/db/foo.db 'VACUUM;'
Run Code Online (Sandbox Code Playgroud)