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