1

我想知道是否有人可以解释为什么在事务内部的android平台上运行sql要快得多。例如一些代码,例如:

SQLiteDatabase db = dbHelperExt.getWritableDatabase();
db.beginTransaction();
try {
    ... // some sql inserting/updating/deleting
    db.setTransactionSuccessful();
} finally {
    db.endTransaction();
}

在处理数百个插入时,我的速度提高了数倍,我主要是好奇为什么会这样。另外,我在处理 php/myqsl 时没有注意到同样的增加,这是怎么回事?

4

1 回答 1

2

每当您对 SQLiteDatabase 执行操作时,默认情况下会打开一个事务,该事务负责打开文件、获取 db 对象、执行请求并释放对文件的访问权限。此外,您可能会注意到,第一个操作对系统来说更重。如果您不合并在一个唯一事务中同时执行的不同操作,则将为每个操作创建一个(即:10 个操作 = 10 个事务以及每个操作的所有工作)。

当您使用 1 个事务处理所有事务时,您只需执行一次 95% 的较重操作。唯一的缺点可能是,如果您的一个请求失败,其余请求将被取消。但对我来说,这实际上是一个优势。

编辑: 这里有更多详细信息。

于 2012-09-12T20:10:17.497 回答