我遇到了.import命令来执行此操作(批量插入),但是有一个查询版本,我可以使用sqlite3_exec()执行.
我只想将一个小的文本文件内容复制到一个表中.
下面是这个的查询版本,
".import demotab.txt mytable"
Eamon Nerbon.. 6
Sqlite的性能不受批量插入的影响.单独执行插入(但在单个事务中!)可以提供非常好的性能.
您可能会从增加sqlite的页面缓存大小中受益; 这取决于索引的数量和/或数据的插入顺序.如果您没有任何索引,对于纯插入,缓存大小可能并不重要.
确保使用准备好的查询,而不是在最里面的循环中重新生成查询计划.将语句包装在事务中是非常重要的,因为这样可以避免文件系统将数据库同步到磁盘的需要 - 事后,部分写入的事务无论如何都会自动中止,这意味着所有fsync()都会被延迟,直到事务完成.
最后,索引将限制您的插入性能,因为它们的创建有点昂贵.如果你真的在处理大量数据并从一个空表开始,那么在数据之后添加索引可能是有益的 - 尽管这不是一个很大的因素.
哦,您可能想要获得其中一台intel X25-E SSD并确保您拥有AHCI控制器;-).
我正在维护一个带有sqlite db的应用程序,大约有5亿行(分布在几个表中) - 其中大部分使用普通的旧的begin-insert-commit批量插入:它工作正常.
Sqlite的性能不受批量插入的影响.单独执行插入(但在单个事务中!)可以提供非常好的性能.
您可能会从增加sqlite的页面缓存大小中受益; 这取决于索引的数量和/或数据的插入顺序.如果您没有任何索引,对于纯插入,缓存大小可能并不重要.
确保使用准备好的查询,而不是在最里面的循环中重新生成查询计划.将语句包装在事务中是非常重要的,因为这样可以避免文件系统将数据库同步到磁盘的需要 - 事后,部分写入的事务无论如何都会自动中止,这意味着所有fsync()都会被延迟,直到事务完成.
最后,索引将限制您的插入性能,因为它们的创建有点昂贵.如果你真的在处理大量数据并从一个空表开始,那么在数据之后添加索引可能是有益的 - 尽管这不是一个很大的因素.
哦,您可能想要获得其中一台intel X25-E SSD并确保您拥有AHCI控制器;-).
我正在维护一个带有sqlite db的应用程序,大约有5亿行(分布在几个表中) - 其中大部分使用普通的旧的begin-insert-commit批量插入:它工作正常.