如何缩小sqlite数据库?

时间:2011-10-07 02:31:33

标签: java android sqlite

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

7 个答案:

答案 0 :(得分:22)

您是否尝试过VACUUM

  

VACUUM命令可重建整个数据库。应用程序可能会这样做有几个原因:

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

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

答案 1 :(得分:10)

一些提示:

  • SQLite有点懒于回收未使用的空间;使用VACUUM命令或auto vacuum mode

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

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

答案 2 :(得分:2)

尝试压缩它并使用zipinput流,同时从资产中解压缩数据库。无论如何,当你创建你的apk时,android会压缩你的14mb数据库(在安装过程中将解压缩),所以我猜你的apk大小将在5-6mb左右。

答案 3 :(得分:1)

我有sqlite的经验,我导入了大约3mb的数据,之后我意识到数据有编码问题。在修复编码问题后,我放弃了表,重新制作并重新导入数据。结果:一个6mb的sqlite文件。我的解决方案是删除sqlite db并创建一个新的。 (没有关于你在数据库中存储的内容的更多细节,这就是我能提供的所有内容......)

答案 4 :(得分:1)

对于Android应用程序来说,14mb非常大,如果您可以安排从服务器下载并集成到应用程序中,它会更好。

您可以将应用程序与压缩的数据库文件(即.zip文件)捆绑在一起,并在首次运行应用程序时解压缩(记住删除.zip文件)。最好在SD卡上完成所有这些工作。

答案 5 :(得分:1)

将@Tono Nam的comment放入答案中。具有完整语法的示例始终非常有用。

在命令行上运行以下命令以使用vacuum命令:

sqlite3 /path/to/your/db/foo.db 'VACUUM;'

答案 6 :(得分:0)

对于现在的应用来说,14MB并不是那么大。 您可以尝试的另一件事是删除不必要的表索引。某些索引可能潜伏在您的表中,并且它们可能占用大量空间。您可能需要采用不同的方式进行查询。