REJAVA / LEARNING NOTES
第10课速查:索引选型与验证
随时回查术语、规则和示例;完整解释见对应课程。
根据课程材料整理
本次更新说明
- 整理为公开学习笔记,保留要点、对照表与练习入口。
一条主线
先确认业务条件与返回字段 → 提出候选索引 → 推演扫描区间与整行读取 → 看计划 → 在可控环境验证实际执行与结果一致性。
本课候选 (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行?回答与课程复测核对。可选的数据库实验不是学习新课的前提。