从C?sqlite3批量插入?

时间:2009-08-31 12:33:37

标签: sqlite bulkinsert

我遇到了.import命令来执行此操作(批量插入),但是我是否可以使用sqlite3_exec()执行此查询版本。

我只想将一个小的文本文件内容复制到一个表中。

下面这个的查询版本,

  

“。import demotab.txt mytable”

1 个答案:

答案 0 :(得分:6)

Sqlite的性能不会受到批量插入的影响。单独执行插入(但在单个事务中!)可以提供非常好的性能。

您可能会从增加sqlite的页面缓存大小中受益;这取决于索引的数量和/或数据的插入顺序。如果您没有任何索引,对于纯插入,缓存大小可能并不重要。

确保使用准备好的查询,而不是在最里面的循环中重新生成查询计划。将语句包装在事务中是非常重要的,因为这样可以避免文件系统将数据库同步到磁盘的需要 - 事后,部分写入的事务无论如何都会自动中止,这意味着所有fsync()都会被延迟,直到事务完成

最后,索引将限制您的插入性能,因为它们的创建有点昂贵。如果您真的处理大量数据并从空表开始,那么在数据之后添加索引可能是有益的 - 尽管这不是一个很大的因素。

哦,您可能想要获得其中一台intel X25-E SSD并确保您拥有AHCI控制器; - )。

我正在维护一个带有sqlite db的app,大约有5亿行(遍布几个表) - 其中大部分是使用普通的旧的begin-insert-commit批量插入的:它工作正常。