使用 sqlite 的开箱即用或默认设置,250 毫秒来提交事务是有意义的。这是由于 sqlite 提交事务的方式所致。它等待 VFS 保证写入已提交到磁盘以返回。
这里有一些优化的可能性。
每个事务封装更多插入
如果可能,每个事务执行更多插入。尝试在一个事务中运行 100 次插入,看看与仅 1 次插入相比差异有多大。您甚至可能看不到任何内容(即 100 次插入可能会花费略多于 250 毫秒的时间)。
最重要的是,您将获得更多的收益,因为每次插入最终将花费更少的时间(平均而言)。
使用 WAL 日志记录
我强烈建议您尝试 WAL 日志记录,因为您应该会看到 250 毫秒显着减少。 WAL 的安全性不应比常规日记差。 WAL 更快的原因就在它的名字中:它附加到日志文件中,而不是让数据库文件在每次提交时吸收提交的更改。读this http://www.sqlite.org/wal.html完整的故事。
要激活 WAL 日志功能,请设置journal_mode
杂注到WAL
:
PRAGMA journal_mode = WAL;
更改同步编译指示
这对您来说可能足够好,也可能不够好,因为它不太安全。因此,只有当您了解风险是什么,并且前面的两个建议对您来说不够好,或者您无法使用它们时,我才会推荐它。
基本上,改变synchronous
pragma
设置为 NORMAL 或 OFF 将导致 sqlite 在 VFS 之后不等待保证写入已提交到磁盘以返回。
请阅读文档 http://www.sqlite.org/pragma.html#pragma_synchronous首先,如果您仍然想尝试一下,可以将您的编译指示设置为 OFF 或 NORMAL:
PRAGMA synchronous = NORMAL;
or
PRAGMA synchronous = OFF;