SQLite更新一个记录是非常(相对)慢
在插入/更新许多行时,我知道SQLite的“问题”,但这不是这种情况。
我正在更新一行中的一个字段,由PK索引,放在一个有250条记录的表中。 查询总是需要〜200毫秒。 这听起来很少,但它很大。
  为什么1个非常简单的UPDATE查询需要200 ms?  所有的阅读都很快。 
我试过了:
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
  它就像一个魅力。  没有ACID,是速度。  出于一些令人难以置信的原因, UPDATE现在需要<1ms。 
  还有一些改进的journal_mode : 
PRAGMA journal_mode=MEMORY
or
PRAGMA journal_mode=OFF
  两者速度都很快,而不是ACID。  回滚不是问题,所以在这种情况下两者都很好。  OFF是最快的,因为它根本不创建日志(?)。 
SQLite是处理轻量级数据集的好选择。 是的,在插入/更新数据时,它比任何数据库要慢得多。 可以通过自己提交查询来加速这些操作。请通过下面的演示代码。 我已经用JDBCTemplate Spring框架引用了JAVA代码来执行我的数据库操作。 请使用try-catch bolck处理所需的例外情况
conn = DataSourceUtils.getConnection(jdbcTemplate.getDataSource());
conn.setAutoCommit(false);
PreparedStatement stmt = conn.prepareStatement(query_string);
for(Object[] temp:argsListForInsertQuery)
{
    stmt.setString(1, (String)temp[0]);
    stmt.setString(2, (String)temp[1]);
    stmt.setString(3, (String)temp[2]);
    stmt.setString(4, (String)temp[3]);
    stmt.addBatch();
 }
 stmt.executeBatch();
 conn.commit();
 conn.setAutoCommit(true);
 conn.close();
                        链接地址: http://www.djcxy.com/p/19817.html
                        
                        
                    