外观
SQLite 的表、SQL 和索引,怎样支撑本地查询?
标准回答
表像按字段整理的数据清单,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。
参考资料
内容来源
- Android · AI Agent 知识手册 · 原条目
job-A05