9

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

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

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

  2. 混淆使用InserHelperContentValues ,如此所示。

    InserHelper是如何工作的,它总是比ContentValues快吗?用交易包裹它会进一步加快速度吗?

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

  4. 我听说在某些情况下,最好不要将 UI 线程用于 DB 操作。在哪些情况下建议这样做?例如,数据库操作会变得多慢?如果 DB 变成 70MB,是否意味着它会慢很多,UI 线程永远不应该处理它?

4

1 回答 1

13

怎么会?

事务涉及磁盘 I/O。做一大块磁盘 I/O 比做很多小块磁盘 I/O 便宜得多。

InserHelper 是如何工作的,它总是比 contentValues 快吗?

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

会以交易速度进一步包装它吗?

大概是的。

安卓也是这样吗?

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

是好东西用吗?

这是不可能抽象地回答的。这与 Android 无关。

最好不要将 UI 线程用于 DB 操作

正确的。

在哪些情况下会被推荐?

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

数据库操作会变得多慢?

几个世纪。到那时,设备可能会出现故障,或者电池电量耗尽。

如果数据库变成 70MB ,是否意味着它会慢很多

这取决于你用它做什么。

和 UI 线程不应该处理它?

正确的。

于 2012-10-13T18:39:17.373 回答