【问题标题】:sqlite3 bulk insert from C?来自C的sqlite3批量插入?
【发布时间】:2010-11-24 08:12:53
【问题描述】:

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

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

下面这个的查询版本,

".import demotab.txt mytable"

【问题讨论】:

    标签: sqlite bulkinsert


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-05-02
      • 1970-01-01
      • 2010-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多