SQLite更新ONE记录非常(相对)缓慢

Rud*_*die 1 sqlite sql-update

在插入/更新许多行时,我知道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,如果这很重要的话.

Rud*_*die 8

是的,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是最快的,因为它根本不创建日记(?).