【发布时间】:2014-06-30 03:40:58
【问题描述】:
我有一个方法可以删除我本地 sqlite 数据库中的所有记录。
public void deleteAll() {
Cursor c = getAllRows();
long rowId = c.getColumnIndexOrThrow(KEY_ROWID);
if (c.moveToFirst()) {
do {
deleteRow(c.getLong((int) rowId));
} while (c.moveToNext());
}
c.close();
}
我注意到,如果我有大约 400 多条记录(每行大约有 5 个字符串列的简单行)要删除它大约需要 2 秒并冻结我的 UI。但是,如果我的记录少于 100 条,它几乎可以立即运行。我想知道这是否正常,或者我是否可能有一些代码潜伏在某处导致性能问题。我是一个初学者,所以如果我发现我有一些非常丑陋的代码将所有内容都锁定了,我丝毫不会感到震惊。
【问题讨论】:
-
每次删除都成为一个单独的事务,用 start/commit 括起来,并伴随着写事务日志。就像插入一样,您应该在单个事务中执行组中的所有删除操作——您将看到大约 100 倍的性能提升。
-
只有在需要时(通常)将需要的数据从数据库中提取到客户端,这是您出错的地方。从表中删除所有内容是不需要表中任何数据的操作,因此请遵循 juergen d 的建议
标签: performance sqlite android-sqlite android-cursor