使用C API插入SQLite的最快方法?

时间:2009-12-01 16:58:23

标签: c sqlite

我想尽可能快地将大量插入(比方说几百万)插入到数据库中。因为我是从C调用的,所以我认为在API中可能有一个快捷方式。我不禁觉得从数据创建字符串并让SQLite在一次调用中解析回字符串的效率低于它可能的效率。

有没有办法插入数据而不必创建SQL字符串?准备好的陈述是唯一的出路吗?

我正在寻找以特定于C的方式以最有效的方式插入数据,而不是一般的数据库提示

3 个答案:

答案 0 :(得分:6)

在代码中启动事务,并且所有插入都将在提交中写入磁盘之前在内存中发生。 (根据您可用的内存量以及插入的数据量,您可能需要对此进行分块)这将是您将看到的最大性能提升。

否则,如果它插入到同一个表中,则在每次插入后将数据一次重新绑定到同一语句,以防止文本处理开销。但是,与交易相比,这将是相对较小的。大部分插入时间都在磁盘写入中......

答案 1 :(得分:4)

DROP INDEX,INSERT,ADD / REBUILD INDEX。

用于大型插入的另一种常用技术SQL是删除索引,插入x000的记录,然后重建索引。如果你有足够的记录插入,你可能会发现这个更快。您可以对数据库进行基准测试,以确定是否可以快速进行设置。

答案 2 :(得分:2)

使用SQLite和C可以实现每秒90,000次以上的插入(如果您有索引,该数字将下降到大约每秒60,000次插入)。你应该:

  • 使用单笔交易
  • 使用预准备语句和绑定方法
  • 将回滚日志放入内存(如果可以)
  • 删除索引并在插入数据后重新编制索引
  • 请阅读此问题以获取更多详情:"How do I improve the performance of SQLite?" *

    *无耻的插件:当我开始使用SQLite时,我有许多相同的性能问题 - 所以我尝试根据我的经验创建一个完整的Wiki条目(带有真正的基准测试和真实的C代码)。

    < / LI>