← ReJava · 学习目录

REJAVA / LEARNING NOTES

第10课速查:索引选型与验证

随时回查术语、规则和示例;完整解释见对应课程。

Java 17 / 21更新于 2026.10.12约 2 分钟阅读

根据课程材料整理

本次更新说明
  • 整理为公开学习笔记,保留要点、对照表与练习入口。

返回完整课程 · 课后问答 · 课程目录 · 术语

一条主线

先确认业务条件与返回字段 → 提出候选索引 → 推演扫描区间与整行读取 → 看计划 → 在可控环境验证实际执行与结果一致性。

本课候选 (dept_id, status, submitted_at):部门、状态等值后取时间范围;部门在首位兼顾仅按部门查询。编号作为主键已在二级索引中。办件表是教学例子,不是真实项目的优化成果。

概念用例子记别背成
clustered index(聚簇索引)本表显式主键组织整行记录只存主键,不存数据
secondary index(二级索引)部门、状态、时间+主键每条记录是整行的磁盘地址
leftmost prefix(最左前缀)部门;部门+状态;部门+状态+时间查询条件必须按索引顺序书写
范围后的列时间后面的状态可能继续过滤后面的列一律完全无效
covering index(覆盖索引)所需字段全在当前索引;加姓名就不再覆盖覆盖一定只扫少量记录
ICP(索引条件下推)在索引上先筛状态,减少后续整行读取下推等于完全没有回表
索引成本更多空间、插入删除和相关更新维护为了覆盖,把所有列加进索引

执行计划只先看四项

key(选用索引)看计划用了谁;type(访问类型)看怎么找;rows(估计检查行数)是估计,不能当实测;Extra(补充信息)区分 Using index(索引覆盖读取)和 Using index condition(索引条件下推)。

EXPLAIN ANALYZE(实际执行分析)会运行查询,先用测试环境。实际输出按执行节点理解,不把每个节点返回行数都叫扫描行数。记录同一查询前后结果、多次实际表现、数据分布与写入成本。

90秒表达提示

我会先确定……;候选是……,排序原因是……;需要申请人后……;范围之后的列……;我会用计划核对……,再实测……;没有真实项目数据时,我会明确这是练习方案。

隔日回忆

只给部门有前缀吗?加姓名为什么不再覆盖?计划估计80行为什么不能说成实际80行?回答与课程复测核对。可选的数据库实验不是学习新课的前提。

依据:官方联合索引、索引存储、范围优化、执行计划、下推、成本。不懂时回到课程第三节的排序表,沿同一张办件表推演。