如何在Android中使用SQLite实现最佳性能?

and*_*per 9 sqlite android transactions bulkinsert

我注意到有多种方法可以进行SQLite操作(查询,插入,更新,删除),有些方法比其他方法更快.许多网站提供不同的提示,有些与其他网站冲突.

  1. 似乎使用事务进行批量插入比以某种方式在循环中这样做更快.

    怎么会?使用SQLite时获得最佳性能的最佳方法是什么?sqlite如何在Android上运行?

  2. 使用混淆InserHelper VS ContentValues,如图所示这里.

    InserHelper如何工作,它总是比ContentValues更快?通过交易包装它会进一步加快速度吗?

  3. 对其他SQL框架的困惑.我记得添加索引会提高与索引相关的查询的性能.这对Android也是如此吗?这是一个好习惯吗?

  4. 我听说在某些情况下,最好不要使用UI线程进行数据库操作.在哪种情况下推荐这种情况?如此,数据库操作变得有多慢?如果DB变为70MB,是否意味着它会慢得多,UI线程永远不应该处理它?

Com*_*are 13

怎么会?

事务涉及磁盘I/O. 与大量磁盘I/O相比,执行一个更大的磁盘I/O块要便宜得多.

InserHelper如何工作并且总是比contentValues更快?

引用文档:"此类允许用户对表执行多次插入,但只编译一次SQL插入语句,这可能会提高性能."

它会以更快的速度包装它吗?

大概是的.

对于Android也是如此吗?

如果为正在执行的任何查询创建正确的索引,则索引可以提高查询速度.索引总是会降低插入/更新/删除速度,因为现在需要更新这些索引.这与Android没有任何关系.

是一件好事吗?

这是不可能抽象回答的.这与Android没有任何关系.

最好不要将UI线程用于数据库操作

正确.

在哪些情况下会被推荐?

永远不建议在主应用程序线程上执行任何磁盘I/O.

DB操作变得多慢?

世纪.可能到那时,设备中的某些东西会失效,或者它会耗尽电池电量.

如果DB变为70MB,是否意味着它会慢得多

这取决于你用它做什么.

和UI线程永远不应该处理它?

正确.