C++ 具有多条记录的SQLite表的高效更新

C++ 具有多条记录的SQLite表的高效更新,c++,python,sql,database,sqlite,C++,Python,Sql,Database,Sqlite,我试图在一个项目中使用sqlite(sqlite3)来存储数十万条记录(希望使用sqlite,这样程序的用户就不必运行[my]sql server) 有时我必须更新数十万条记录才能输入左右值(它们是分层的),但我已经找到了标准 update table set left_value = 4, right_value = 5 where id = 12340; 要非常慢。我已经尝试过每一千个左右 begin; .... update... update table set left_value

我试图在一个项目中使用sqlite(sqlite3)来存储数十万条记录(希望使用sqlite,这样程序的用户就不必运行[my]sql server)

有时我必须更新数十万条记录才能输入左右值(它们是分层的),但我已经找到了标准

update table set left_value = 4, right_value = 5 where id = 12340;
要非常慢。我已经尝试过每一千个左右

begin;
....
update...
update table set left_value = 4, right_value = 5 where id = 12340;
update...
....
commit;
但还是很慢。奇怪的是,当我用几十万(带有插入)填充它时,它会在几秒钟内完成


我现在尝试在Python中测试速度(慢是在命令行和Python),然后再把它移到C++实现,但是现在这是慢的方法,除非我做错了什么,否则我需要找到新的解决方案。思想?(将采用可移植的SQLite的开源替代方案)

table.id上创建索引

create index table_id_index on table(id)

除了确保有索引外,您还可以签出

正如您所提到的,使用事务可以大大提高速度,您还可以尝试关闭日志记录

例1:

2.2布拉格同步

布尔同步值控件 图书馆是否会等待 对于要完全写入的磁盘写入 在继续之前,请先打开磁盘。这个设置 可以不同于 从中加载的默认\u同步值 数据库。在典型使用中 图书馆可能会花很多时间 正在等待文件系统。背景 “PRAGMA synchronous=OFF”可以使 主要速度差

例2:

2.3杂注计数的变化

当count_changes设置打开时, 回调函数只调用一次 对于每次删除、插入或更新 活动参数是数字 已更改的行数。如果你 不要使用此功能,因为存在错误 通过转动此轴,速度略有提高 走开


找到了那个页面,但这些似乎帮不了什么忙。可能在这里或那里刮一秒钟,但只有大约1%或更少。值得注意的是,PRAGMA count_的更改已被弃用。哇,这似乎奏效了。为什么以及在哪里可以阅读更多有关它的信息?SQLite3优化器的概述位于@blackrim:同一页: