Skip to content
阅读进度

SQLite 的表、SQL 和索引,怎样支撑本地查询? ​

返回 架构与 SDK 目录

标准回答 ​

表像按字段整理的数据清单,SQL 表达筛选、排序、增删改,索引像额外制作的查找目录。Room 帮你管理数据库调用,但底层查询是否高效,仍取决于数据量、SQL 和索引。

  • 用绑定参数传值,避免拼接用户输入;只查询当前页面需要的列和行。
  • 复合索引的列顺序影响可用查询,使用 EXPLAIN QUERY PLAN 观察实际计划。
  • 索引会增加写入和存储成本,数据库迁移也要保留旧用户数据。

通俗例子 ​

设备事件表有几十万条记录,页面只要 A17 设备最近 20 条。用 WHERE device_id = ? ORDER BY created_at DESC LIMIT 20,并评估 (device_id, created_at) 索引,比先读取全表再在 Java 中筛选更合适。

深入解释 ​

**索引怎样减少查找:**没有合适索引时,查询可能扫描很多记录;有按设备 ID 和时间组织的索引后,可以更快定位该设备的时间范围,再取需要的几条。

**为什么还要看查询计划:**索引存在不等于这一条 SQL 一定会用它,字段顺序和查询条件都会影响选择。EXPLAIN QUERY PLAN 用来观察数据库实际计划怎样查。

易混淆点 ​

不是给所有字段建索引就更快,也不是用了 Room 就不必理解 SQL。

参考资料 ​

内容来源 ​

用完整回答理解机制,用真实证据解释项目。