在插入/更新许多行时,我知道SQLite的"问题",但事实并非如此.
我正在更新一行中的一个字段,由PK索引,在一个包含约250条记录的表中.查询总是需要大约200毫秒.这听起来很少,但它很大.
为什么1个非常简单的UPDATE查询需要200毫秒?所有阅读都非常快速.
我试过了:
BEGIN并且COMMIT- 没有变化,因为它只是一个声明PRAGMA journal_mode=PERSIST - 没有变化,显然磁盘io不是问题?UPDATE语句 - 这对于时间来说非常有用!但它不是很持久要在同一系统上与MySQL进行比较:在非常相似的数据库中为0.6ms.
我不需要事务安全性(ACID?)或任何你称之为.如果计算机在此查询期间崩溃,我可以丢失所有更改.MySQL(InnoDB)有一个选项:innodb_flush_log_at_trx_commit.SQLite有类似的东西吗?
我正在使用sqlite-3.7.9,如果这很重要的话.
是的,SQLite有像MySQL这样的选项innodb_flush_log_at_trx_commit:
PRAGMA synchronous=OFF
Run Code Online (Sandbox Code Playgroud)
它就像一个魅力.没有ACID,是的速度.出于某种不可思议的原因,UPDATE现在需要<1ms.
还有改进journal_mode:
PRAGMA journal_mode=MEMORY
or
PRAGMA journal_mode=OFF
Run Code Online (Sandbox Code Playgroud)
两者都非常快,而不是ACID.回滚不是问题,因此在这种情况下两者都很好.OFF是最快的,因为它根本不创建日记(?).