索引与查询计划
引入
词汇
| English | 释义 | 拼音 |
|---|---|---|
| B-tree | B 树 | B shù |
| query plan | 查询计划 | chá xún jì huà |
有序的捷径
- B 树 B-tree 索引把键有序存进平衡多路树:4 阶教学树两层装 15 个键——任一键 2 次节点读,顺序扫则 15 次。
- 查询计划 query plan 是引擎选定的管道:
EXPLAIN QUERY PLAN打印它,而定价的是计划——不是查询文本。

{exercise:uni-cs0804-btree}
练习
分叉 100、高 3 的 B 树覆盖——键。
难度 1/5 · 今日首次完成可获 100 金币及少量额外奖励
m 的 h 次方:100 三次方一百万——每次查 3 读。
分叉算术
- $k$ 个键的节点在 $k+1$ 个孩子间路由:分叉 $\approx m$、高 $h$ 覆盖 $m^h$ 条。分叉 100:三层覆盖 $100^3 = 10^6$ 键——百万行查找 3 次读,且对每个键成立(分裂保平衡)。
SELECT title FROM Course WHERE credits = 20:无索引计划是SCAN Course;加INDEX ON Course(credits)后是SEARCH Course USING INDEX idx (credits=?)。6 行时都瞬时;600 万行时是 3 次对 600 万次。
{exercise:uni-cs0804-plan}
练习
无索引时 EXPLAIN QUERY PLAN 打印——
难度 1/5 · 今日首次完成可获 100 金币及少量额外奖励
引擎说出它要做什么:SCAN 即全表读。
写入税
- 每个索引都给每次插入删除加活:3 个索引的模式每次插入写 4 个结构(表 + 3 棵树)。日插千万的日志表带 5 个索引,每天多维护五千万条索引项。
- 查什么建什么、不查就删、读计划不读查询。
WHERE UPPER(name) = …击败普通索引——计算列对不上。
{exercise:uni-cs0804-tax}
练习
带 3 个索引的表每次插入花——
难度 1/5 · 今日首次完成可获 100 金币及少量额外奖励
表 + 3 树 = 4 个结构:索引是写入偿还的贷款。