2

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

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

下面这个查询版本,

“.import demotab.txt mytable”

4

1 回答 1

6

Sqlite 的性能不会从批量插入中受益。简单地单独执行插入(但在单个事务中!)提供了非常好的性能。

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

请务必使用准备好的查询,而不是在最内层循环中重新生成查询计划。将语句包装在事务中非常重要,因为这避免了文件系统将数据库同步到磁盘的需要——毕竟,部分写入的事务无论如何都会被原子中止,这意味着所有 fsync() 都会延迟到事务完成.

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

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

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

于 2009-08-31T12:35:09.473 回答