使用C ++接口API在数据库表中插入大约1.1亿条记录需要花费大量时间(> 1个小时)。
有什么办法可以减少这段时间并提高插入操作的效率?
我将一笔交易中的1000条记录分组,然后执行它们。
sqlite3_exec(begin transaction);
sqlite3_exec(<1000> insertions);
sqlite3_exec(end transaction);
这花费了大量时间。
如何提高插入效率?
答案 0 :(得分:2)
假设所有语句仅在同一表中INSERT
处,则可以通过将语句创建为准备好的语句,然后将其重新用于每一行(将其绑定到新语句)来提高性能。数据)。对准备好的语句的解释是here;基本思想是,您不用sqlite3_exec
,而是用sqlite3_prepare_v2
(使用占位符代替数据)来准备一条语句,然后将每一行将其绑定到数据,执行并重置它。这样,SQLite不必每次都重新解析/重新编译该语句,因为只有值会更改。