默认情况下,如何使用PRAGMA synchronous = OFF让SQLite更快地运行

dja*_*fan 5 database sqlite

我刚从命令行创建了一个新的SQLite数据库,并且我有一个到SQLite数据库的ODBC连接.
如果我发出查询,默认情况下,同步似乎是"开启",这实际上是在减慢INSERT性能的大时间.

如何在PRAGMA synchronous = OFF 不需要发送SQL命令的情况下将SQLite数据库设置为默认值?我可以创建一个.INI文件或其他东西来启用它吗?

dja*_*fan 10

Unfortunately for everyone, after letting this question sit for 6 days, I finally figured out the answer. The SQLite ODBC driver seems to be the answer. If you create a DSN, it allows you to set Sync to "OFF" in the DSN settings. Very convenient.

  • 完全同步时我得到 96rps,正常同步时我得到 120rps,同步关闭时我得到大约 260rps。区别不大,但至少有所不同。 (2认同)

MPe*_*ier 5

默认情况下,SQLite 以完全同步的方式运行。没有 INI,除了连接时没有什么可改变的。但是,每个会话只需设置一次,因此您可以更改项目的连接功能,在连接后添加“PRAGMA synchronous = OFF”命令。这实际上是最干净、最快捷的方法。

但是,如果您真的希望 SQLite 在默认情况下关闭同步打开您的数据库,您可能需要使用不同的默认值重新编译 SQLite。

对于当前版本 (3.7.3),safety_levelsqlite- amlgamation源的sqlite.c 中查找变量:

改变:

safety_level = 3;
Run Code Online (Sandbox Code Playgroud)

到:

safety_level = 1;
Run Code Online (Sandbox Code Playgroud)

(是的,它与外壳设置不同。)在openDatabase函数中(attachFunc如果您愿意)。


如果您真的需要加速此过程,如评论中所述,您至少要考虑交易。在未来,这是首选的解决方案。它可能不是最简单的,或最可能的(毕竟时间是有限的),但从长远来看,它是最干净、最清醒、最容易维护的。(我只需要把它从我的胸膛上拿开。完成了!)