SQLite在三星Galaxy GT-I9000中速度极慢

时间:2010-08-17 10:24:49

标签: android performance sqlite

我在三星Galaxy GT-I9000设备的Android应用程序中遇到SQLite数据库的性能问题。该数据库包含10个表,每个表有3到8列。

一旦数据库文件获得大约400 KB更新/ instert查询需要更多时间执行 - 2秒!与其他设备(HTC Magic,HTC Desire)相比,更新/插入查询大约需要40毫秒!

数据库文件位于应用程序数据目录中。将数据库文件移动到SD卡会显着提高速度。

Periodic ANALYZE和VACUUM命令不会影响速度。以及PRAGMA cache_size命令。

您对如何提高性能有任何想法吗?

除了将数据库保存在SD卡中或将数据库拆分为包含每个表的许多文件之外,欢迎任何想法。

4 个答案:

答案 0 :(得分:4)

三星Galaxy S对内部SD卡的访问速度非常慢。有多种inofficial lag fixes可用,似乎三星的RFS文件系统负责延迟。

希望三星会发布修复此问题的更新,在此之前,最好的办法是尽可能避免I / O.

答案 1 :(得分:3)

使用事务和参数化查询。如果不使用参数化查询,Sqlite必须解析每个sql语句。所有这些不必要的解析使得简单的插入语句慢2到3倍。见这里:How do I get around the "'" problem in sqlite and c#?

使用事务也非常重要,因为Sqlite可以非常快地执行插入,但提交速度很慢,因此您必须将插入/更新和删除捆绑到一个大事务中。

答案 2 :(得分:2)

批量插入命令应在事务中完成:

BEGIN TRANSACTION;
// INSERTS
COMMIT;

答案 3 :(得分:2)

这有很大帮助,并且激励我去搜索更多。我发现了一个可以带来巨大推动力的解决方案:

PRAGMA synchronous = OFF

INSERT / UPDATE查询运行速度提高了4倍。

但它有一个小缺点。

这里有更多细节:
http://web.utk.edu/~jplyon/sqlite/SQLite_optimization_FAQ.html#pragmas