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