我的问题直接来自这个问题,虽然我只对UPDATE感兴趣并且只对此感兴趣.
我有编写的应用程序中C/C++,这使得大量使用的SQLite,主要是SELECT/UPDATE,在一个非常频繁间隔(约20个查询每0.5至1秒)
我的数据库不大,此刻约有2500条记录,这里是表结构:
CREATE TABLE player (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR(64) UNIQUE,
stats VARBINARY,
rules VARBINARY
);
Run Code Online (Sandbox Code Playgroud)
到目前为止,我没有使用,transactions因为我正在改进代码并希望稳定而不是性能.
然后我通过仅执行10 update查询来测量我的数据库性能,以下(在不同值的循环中):
// 10 times execution of this
UPDATE player SET stats = ? WHERE (name = ?)
Run Code Online (Sandbox Code Playgroud)
其中stats一个JSON恰好是150个字符,name是5-10个字符.
没有交易,结果是不可接受的: - 大约1整秒(每个0.096)
随着交易,时间下降x7.5倍: - 约0.11 - 0.16秒(每个0.013)
我尝试删除数据库的大部分和/或重新排序/删除列,以查看是否有任何改变,但事实并非如此.即使数据库只包含100条记录(已测试),我也会得到上述数字.
然后我试着玩PRAGMA选项:
PRAGMA synchronous = …Run Code Online (Sandbox Code Playgroud)