SQLite - 预分配数据库大小

pau*_*aul 1 c++ sqlite embedded

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

Noa*_*oah 5

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

例:

Y:> sqlite3 large.sqlite
SQLite版本3.7.4
输入".help"作为指令
输入以";"结尾的SQL语句
sqlite> create table large(a) ;
sqlite> 插入大值(zeroblob(1024*1024));
sqlite> drop table large;
sqlite> .q

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

目录Y:\

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


注意:正如凯尔在评论中正确指出:

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


Sam*_*Sam 3

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

“当从数据库中删除对象(表、索引或触发器)时,它会留下空白空间。下次将新信息添加到数据库时,将重用该空白空间。但与此同时,数据库文件可能会大于严格必要的值。”

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