当前位置:  开发笔记 > 数据库 > 正文

从C?sqlite3批量插入?

如何解决《从C?sqlite3批量插入?》经验,为你挑选了1个好方法。

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

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

下面是这个的查询版本,

".import demotab.txt mytable"

Eamon Nerbon.. 6

Sqlite的性能不受批量插入的影响.单独执行插入(但在单个事务中!)可以提供非常好的性能.

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

确保使用准备好的查询,而不是在最里面的循环中重新生成查询计划.将语句包装在事务中是非常重要的,因为这样可以避免文件系统将数据库同步到磁盘的需要 - 事后,部分写入的事务无论如何都会自动中止,这意味着所有fsync()都会被延迟,直到事务完成.

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

哦,您可能想要获得其中一台intel X25-E SSD并确保您拥有AHCI控制器;-).

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



1> Eamon Nerbon..:

Sqlite的性能不受批量插入的影响.单独执行插入(但在单个事务中!)可以提供非常好的性能.

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

确保使用准备好的查询,而不是在最里面的循环中重新生成查询计划.将语句包装在事务中是非常重要的,因为这样可以避免文件系统将数据库同步到磁盘的需要 - 事后,部分写入的事务无论如何都会自动中止,这意味着所有fsync()都会被延迟,直到事务完成.

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

哦,您可能想要获得其中一台intel X25-E SSD并确保您拥有AHCI控制器;-).

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

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有