KEEL · 龙骨 · A CURRICULUM FOR THE AI ERA
索引与并发实战 — keel 龙骨
索引与并发实战 的参考信息:索引与并发实战
课程导读 · 把调优从"会看"推进到"敢改"
学完《数据库与缓存调优》你能看懂执行计划、知道索引的基本原则、能排查锁等待。但真实生产里还有一整层问题那门课没展开:
EXPLAIN明明走了索引,为什么还是慢?- 一个上线三年的表有 12 个索引,哪些能删?删错了怎么办?
- 并发从 50 涨到 500,吞吐不涨反降,拐点在哪、怎么量化?
- 扣库存用
UPDATE ... SET stock = stock - 1还是版本号?冲突率多高时应该换方案? - 死锁日志拿到了,改哪一行代码才能真正消掉它?
这门课就是把这些"知道原则但不敢下手"的地方,补成有判据、有动作、有回滚方案的实操。
与《数据库与缓存调优》的分工
| 数据库与缓存调优(先修) | 本课程 | |
|---|---|---|
| 层次 | 建立框架:有哪些问题、各自怎么定位 | 深入一层:怎么定量、怎么选、怎么上线 |
| 索引 | 最左前缀、覆盖索引、常见失效 | 执行计划精读、失效全集、线上加索引的变更管理 |
| 并发 | 隔离级别、锁等待排查、连接池参数 | 并发量化、锁方案选型、死锁工程化、热点削峰 |
| 产出 | 能定位问题 | 能带着数据完成一次改动并安全回滚 |
没有先修那门课,不要直接学这门——你会把"优化"做成"试错"。
你会拿到什么
| 章节 | 一句话 | 关键动作 |
|---|---|---|
| 01 执行计划精读 | 四列之外还要看什么 | key_len / filtered / EXPLAIN ANALYZE / 预估与实际偏差 |
| 02 索引设计:从选择性到字段顺序 | 字段顺序不是靠猜 | 选择性计算 + 等值/范围/排序三段排布 + 前缀与函数索引 |
| 03 索引失效与反模式全集 | 一份能对照排查的清单 | 12 类失效 + force index 的代价 + 优化器误判 |
| 04 索引的代价与线上变更 | 加索引本身是有风险的操作 | 冗余/未使用索引识别 + Online DDL + 权限受限环境怎么加 |
| 05 并发的量化 | 拐点是算出来的不是感觉出来的 | Little's Law + 队列饱和 + 压测曲线 + 背压闸门 |
| 06 乐观锁与悲观锁 | 什么冲突率该换方案 | 版本号 CAS + 条件更新原子扣减 + 重试与 ABA |
| 07 死锁的工程化处理 | 从日志反推改哪行代码 | 死锁日志字段解读 + 预防四招 + 应用层重试策略 |
| 08 热点、削峰与一致性收口 | 削峰之后怎么保证不错账 | 四方案对比 + 幂等三件套 + 对账 |
每章结构统一:原理 → 动手:可观察结果 → 故障注入 → 自测题。
这门课的硬要求
与先修课同一条:没有数据不许下结论。在此基础上再加两条:
- 每次索引变更都必须有回滚路径——包括"加了索引但优化器不认"这种非故障情况;
- 并发相关的结论必须来自压测,且压测要给出并发度-吞吐-延迟三条曲线,不能只报一个 QPS 数字。
替身边界
示例以 MySQL 8.0 / InnoDB 为主,少量涉及 PostgreSQL 的差异会在文中标注。分库分表、NewSQL 不在范围内——本课程假设你还在单实例或主从架构内做优化,这也是绝大多数真实项目的现状。