在插入/更新许多行时,我知道SQLite的“问题”,但事实并非如此 .
我正在更新一行中的一个字段,由PK索引,在一个包含约250条记录的表中 . 查询总是需要大约200毫秒 . 这听起来很少,但它很大 .
为什么1个非常简单的 UPDATE
查询需要200毫秒?所有阅读都非常快速 .
我试过了:
-
BEGIN
和COMMIT
- 没有变化,因为它只是一个声明 -
PRAGMA journal_mode=PERSIST
- 没有变化,显然磁盘io不是问题? -
删除了
UPDATE
语句 - 这对于时间来说非常有用!但它不是很持久
要在同一系统上与MySQL进行比较: 0.6ms 在一个非常相似的数据库中 .
我没有_2548665_很好,失去了 all 的变化 . MySQL(InnoDB)有一个选项: innodb_flush_log_at_trx_commit
. SQLite有类似的东西吗?
我正在使用sqlite-3.7.9,如果这很重要的话 .
2 回答
是的,SQLite有像MySQL的
innodb_flush_log_at_trx_commit
这样的选项:它就像一个魅力 . 没有ACID,是的速度 . 出于某种不可思议的原因,
UPDATE
现在需要<1ms .还有改进
journal_mode
:两者都非常快,而不是ACID . 回滚不是问题,因此在这种情况下两者都很好 .
OFF
是最快的,因为它根本不创建日志(?) .SQLite是处理轻量级数据集的好选择 . 是的,在插入/更新数据时,它比任何数据库慢得多 . 通过自己提交查询,可以加快这些操作 . 请通过下面的演示代码 . 我已经使用JDBCTemplate Spring框架引用了JAVA代码来执行我的数据库操作 . 请使用try-catch bolcks处理所需的异常