SQLite - 预分配数据库大小

时间:2009-05-05 21:38:34

标签: c++ sqlite embedded

有没有办法预先将我的SQLite数据库分配到一定的大小?目前我正在添加和删除一些记录,并希望在创建时避免这种情况。

2 个答案:

答案 0 :(得分:5)

执行此操作的最快方法是使用zero_blob函数:

示例:

Y:> sqlite3 large.sqlite
SQLite版本3.7.4
输入“.help”获取说明 输入以“;”结尾的SQL语句 源码> 创建大表(a);
源码> 插入大值(zeroblob(1024 * 1024));
源码> drop table large;
源码> .q

Y:> dir large.sqlite
 驱动器Y中的容积为个人
 卷序列号为365D-6110

目录Y:\

01/27/2011 12:10 PM 1,054,720 large.sqlite

<小时/> 注意:正如凯尔在评论中正确指出:

每个blob的大小有限,因此如果您希望数据库大于~1GB,则可能需要插入多个blob。

答案 1 :(得分:2)

有一个hack - 将一堆数据插入数据库,直到数据库大小符合您的要求,然后删除数据。这是因为:

  

“当一个对象(表,索引或   从数据库中删除)   它留下了空旷的空间。这个   空的空间将在下一次重复使用   时间新信息被添加到   数据库。但在此期间,   数据库文件可能大于   严格必要。“

当然,这不是最可靠的方法。 (此外,您需要确保禁用auto_vacuum才能使其正常工作)。您可以在此处了解详情 - http://www.sqlite.org/lang_vacuum.html