1

我试图尽可能简化我的情况,所以它看起来不太真实,对不起。但这是基于一个真正的担忧。

假设我有一个小型 Android 应用程序向用户显示当前温度。温度每秒都在变化,应用程序一直在工作。

该应用程序还有一个“审计”数据库表:

CREATE TABLE TemperatureAudit (
secondsFrom1970 INTEGER not null,
temperature INTEGER not null);

在此应用程序运行一年后,审计表将非常大。让我们想象一下,如果不是真的有必要,我不想截断它。

所以对于那些知道 sqlite 如何在 Android 上工作的人来说,问题是:我应该担心吗?

  1. 当我不使用它时,sqlite 会尝试将这个大表加载到 RAM 中吗?例如,当我从不同的表中选择时。
  2. 如果我尝试“从温度 > 0 的温度审计中选择计数”,sqlite 会一个接一个地加载这个大表吗?或者它会将整个表加载到 RAM 中吗?
  3. 如果 sqlite 对内存分配不太吝啬我该怎么办?将此表移动到另一个数据库有助于解决第一个问题吗?表分区对第二个有帮助吗?
4

1 回答 1

1

SQLite 会加载所有表的元数据,但不会加载任何不需要的实际数据。

所有对数据库的访问都是通过页面完成的,页面大小只有几KB;当前未使用的任何页面都不需要在内存中。所以扫描一张表只需要很少的内存。

于 2017-05-25T07:50:59.683 回答