Skip to content

数据库术语知识库 - 使用指南 ​

快速开始 ​

根据您的经验水平选择学习路径:

初级开发者 (1-2年): 从"01-索引与查询优化"章节开始,重点掌握覆盖索引、回表、最左前缀原则、执行计划、基数这5个核心概念。预计2-3周。

中级开发者 (3-5年): 深入学习索引选择性、索引下推、统计信息、MVCC、事务隔离级别等进阶内容,掌握性能调优方法。预计4-6周。

高级开发者/DBA (5年以上): 研究WAL、Redo Log、Undo Log、检查点、死锁检测算法等底层原理,深入源码分析。预计8-12周。

问题查阅: 直接通过"快速导航.md"中的常见问题速查表定位相关术语。

查找术语的方式 ​

按分类浏览: 知识库分为6个章节,每章聚焦一个技术领域。从根目录进入对应章节文件夹即可找到相关术语。

按问题查找: 参考"快速导航.md"中的常见问题速查表,根据遇到的具体问题快速定位相关术语。

IDE全局搜索: 在VS Code或Lingma IDE中使用Ctrl+Shift+F进行全局搜索,可以搜索术语中文名、英文名或相关标签。

关联跳转: 每个术语笔记底部都有关联术语链接,点击可跳转到相关概念,形成知识网络。

学习方法建议 ​

7天集中学习法 ​

适合想要快速掌握核心知识的开发者。每天选择一个主题,上午阅读理论,下午动手实验,晚上整理笔记。7天完成索引优化、存储结构、事务并发等核心内容的学习。

问题导向学习法 ​

适合遇到具体问题的开发者。明确问题后,通过快速导航定位相关术语,诊断问题原因,实施优化方案,验证效果,最后深入学习背后的原理。

系统化学习法 ​

适合想要全面掌握的开发者。分阶段学习:基础篇通读所有核心术语并完成实验;进阶篇在实际项目中应用并记录案例;高级篇深入源码分析和内核定制。

实践建议 ​

搭建实验环境 ​

bash
# MySQL Docker 快速启动
docker run --name mysql-test -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql:8.0

# 连接数据库
mysql -h 127.0.0.1 -P 3306 -u root -p

结合EXPLAIN学习 ​

学习索引相关术语时,都要结合实际执行计划进行分析。创建测试表,插入数据,然后对不同查询执行EXPLAIN,观察type、key、rows、Extra等字段的变化。

记录学习笔记 ​

每个术语学习后,用自己的话重新解释概念,记录在实际项目中遇到的问题和解决方案,总结常见误区和踩过的坑。

定期复习 ​

数据库概念较为抽象,建议采用间隔重复的方式复习:第1天学习新概念,第3天复习并做练习,第7天再次复习并尝试讲解给他人,第30天长期回顾。

内容特点 ​

每个术语都包含定义、详细原理、源码分析、示例代码、实际案例、最佳实践和参考资料。核心术语包含InnoDB官方源码分析,如trx_rollback()、btr_compress()、lock_deadlock_check()等60多个核心函数。

平均每个术语600-1300行详细内容,不只是表面概念,而是深入到实现原理层面。每个术语都有真实场景案例,包括电商平台、社交平台、物流系统等实际应用。

注意事项 ​

术语笔记之间有大量关联链接,建议顺着知识网络扩展学习,不要孤立地看待单个概念。

所有SQL示例都可以在本地测试环境运行验证,建议动手实践而非仅阅读理论。

部分术语涉及MySQL特定实现,但也提供了PostgreSQL、Oracle等多数据库的对比说明。


📖 快速开始 ​

1. 选择您的学习路径 ​

我是初级开发者 (1-2年经验) ​

→ 阅读 [[README.md|学习路线]] 中的"初级开发者"部分
→ 从 [[覆盖索引]] 开始学习
→ 预计时间: 2-3周

我是中级开发者 (3-5年经验) ​

→ 直接学习 [[索引选择性]]、[[索引下推]] 等进阶内容
→ 重点掌握问题诊断方法
→ 预计时间: 4-6周

我是高级开发者/DBA (5年以上) ​

→ 深入学习 [[页分裂]]、[[参数嗅探]] 等底层原理
→ 补充剩余章节(事务、日志、架构)
→ 预计时间: 8-12周

我只是想查某个概念 ​

→ 使用 [[快速导航.md|快速导航]] 中的搜索技巧
→ 或在 IDE 中全局搜索术语名
→ 立即获得答案


🔍 查找术语的 5 种方式 ​

方式一:按分类浏览 ​

数据库-术语-kb/
├── 01-索引与查询优化/  ← 性能优化相关(11个术语)
├── 02-存储与物理结构/  ← 存储引擎相关(7个术语)
├── 03-事务与并发控制/  ← 并发相关(8个术语)
├── 04-日志与持久化/  ← 可靠性相关(5个术语)
├── 05-架构与设计模式/  ← 架构相关(6个术语)
└── 06-特定功能索引/  ← 特殊索引(5个术语)

方式二:按优先级查找 ​

⭐⭐⭐ 必知必会(日常开发):

⭐⭐ 强烈推荐(性能调优):

⭐ 进阶选读(深入理解):

方式三:按问题查找 ​

遇到的问题查看的术语
查询很慢执行计划、覆盖索引、回表
索引不生效最左前缀原则、统计信息
性能不稳定参数嗅探、统计信息
写入很慢页分裂、索引选择性
如何设计索引最左前缀原则、基数、索引选择性
如何减少回表覆盖索引、索引下推

方式四:使用 IDE 搜索 ​

VS Code / Lingma IDE:

Ctrl+Shift+F (全局搜索)

搜索示例:
- "覆盖索引"    # 术语中文名
- "covering index"  # 术语英文名/别名
- "database/index"  # 标签
- "回表"    # 相关概念

方式五:通过关联跳转 ​

每个术语笔记底部都有“关联术语”部分,点击即可跳转到相关概念,形成知识网络。


📚 学习方法建议 ​

方法一:7天集中学习法 ​

适合:想要快速掌握核心知识的开发者

Day 1: 索引基础

  • 上午:阅读 覆盖索引、回表
  • 下午:在测试环境创建索引,观察差异
  • 晚上:整理笔记,记录疑问

Day 2: 索引设计

  • 上午:阅读 最左前缀原则、基数
  • 下午:设计复合索引,验证最左前缀规则
  • 晚上:总结索引设计原则

Day 3: 查询分析

  • 上午:阅读 执行计划
  • 下午:分析 10+ 个真实查询的执行计划
  • 晚上:整理 EXPLAIN 关键字段含义

Day 4: 高级优化

Day 5: 问题诊断

Day 6: 存储原理

  • 上午:阅读 页分裂
  • 下午:对比顺序插入和随机插入
  • 晚上:理解 B+Tree 内部机制

Day 7: 综合应用

  • 全天:选择一个实际项目进行优化
  • 或:复习所有术语,查漏补缺

方法二:问题导向学习法 ​

适合:遇到具体问题的开发者

步骤 1:明确问题

例如:订单查询接口响应时间从 100ms 增加到 5s

步骤 2:查找相关术语

查询慢 → [执行计划](01-索引与查询优化/执行计划.md)

步骤 3:诊断问题

sql
EXPLAIN SELECT * FROM orders WHERE user_id = 123;
-- 发现:type: ALL (全表扫描)

步骤 4:查找解决方案

全表扫描 → [覆盖索引](01-索引与查询优化/覆盖索引.md)、[回表](01-索引与查询优化/回表.md)

步骤 5:实施优化

sql
CREATE INDEX idx_user_id ON orders(user_id);

步骤 6:验证效果

sql
EXPLAIN SELECT * FROM orders WHERE user_id = 123;
-- type: ref, key: idx_user_id ✅

步骤 7:深入学习

为什么这样优化有效?
→ 阅读 [覆盖索引](01-索引与查询优化/覆盖索引.md)、[回表](01-索引与查询优化/回表.md) 的详细原理

方法三:系统化学习法 ​

适合:想要全面掌握数据库知识的开发者

阶段一:基础篇(2周)

  • 通读所有 ⭐⭐⭐ 术语
  • 完成所有示例代码实验
  • 整理个人笔记

阶段二:进阶篇(2周)

  • 学习所有 ⭐⭐ 术语
  • 在实际项目中应用
  • 记录优化案例

阶段三:深入篇(2周)

  • 学习所有 ⭐ 术语
  • 阅读源码和官方文档
  • 深入理解原理

阶段四:实践篇(持续)

  • 定期审查系统性能
  • 优化慢查询
  • 分享经验给团队

💻 实践环境搭建 ​

方案一:Docker 快速搭建(推荐) ​

bash
# MySQL 8.0
docker run --name mysql-term \
  -e MYSQL_ROOT_PASSWORD=root \
  -p 3306:3306 \
  -d mysql:8.0

# 连接数据库
mysql -h 127.0.0.1 -P 3306 -u root -proot

# 创建测试数据库
CREATE DATABASE test_db;
USE test_db;

方案二:本地安装 ​

MySQL:

PostgreSQL(可选):

方案三:在线实验环境 ​


📝 笔记模板 ​

建议为每个术语创建个人学习笔记:

# [术语名称] 学习笔记

## 我的理解
(用自己的话解释这个概念)

## 核心要点
- 要点1
- 要点2
- 要点3

## 实践案例

### 案例背景
(描述遇到的实际问题)

### 诊断过程
(如何发现问题)

### 解决方案
(应用的优化方法)

### 效果验证
(优化前后的对比数据)

## 常见误区
(学习过程中踩过的坑)

## 相关问题
(面试或工作中被问到的问题)

## 延伸阅读
- [[相关术语1]]
- [[相关术语2]]
- 外部链接...

🎯 学习效果检验 ​

自测清单 ​

学完每个术语后,尝试回答以下问题:

基础理解 ​

  • [ ] 能否用一句话解释这个概念?
  • [ ] 能否举一个实际的例子?
  • [ ] 知道它在什么场景下使用?

深入理解 ​

  • [ ] 理解它的实现原理?
  • [ ] 知道它的优缺点?
  • [ ] 了解它与其他概念的关系?

应用能力 ​

  • [ ] 能够在实际项目中使用?
  • [ ] 能够诊断相关问题?
  • [ ] 能够向他人解释清楚?

实战检验 ​

任务一:分析现有系统

sql
-- 1. 找出系统中的慢查询
-- 2. 分析执行计划
-- 3. 设计优化方案
-- 4. 验证优化效果

任务二:设计新系统

设计一个电商系统的数据库索引策略:
- 用户表
- 商品表
- 订单表
- 购物车表

要求:
- 考虑查询模式
- 遵循最左前缀原则
- 避免过度索引

任务三:问题诊断

场景:某接口突然变慢
- 如何诊断?
- 可能的原因?
- 如何解决?

🤝 团队协作建议 ​

Code Review 检查清单 ​

在 Code Review 时,检查以下内容:

索引设计:

  • [ ] 是否遵循最左前缀原则?
  • [ ] 索引选择性是否合理?
  • [ ] 是否有冗余索引?
  • [ ] 是否考虑了覆盖索引?

查询优化:

  • [ ] 是否避免了 N+1 查询?
  • [ ] 是否使用了合适的 JOIN?
  • [ ] 是否避免了 SELECT *?
  • [ ] 分页查询是否优化?

性能监控:

  • [ ] 关键查询是否有监控?
  • [ ] 是否定期检查慢查询日志?
  • [ ] 是否有性能回归测试?

技术分享主题 ​

基于本知识库,可以组织以下技术分享:

初级系列:

  1. 如何设计高效的数据库索引
  2. EXPLAIN 完全指南
  3. 常见 SQL 性能陷阱

进阶系列:

  1. MySQL 优化器工作原理
  2. InnoDB 存储引擎深入
  3. 高并发下的数据库优化

高级系列:

  1. 数据库内核源码分析
  2. 分布式数据库架构
  3. 云数据库最佳实践

📊 进度跟踪 ​

个人学习进度 ​

复制以下清单,跟踪您的学习进度:

## 学习进度

### ⭐⭐⭐ 必知必会
- [ ] [覆盖索引](01-索引与查询优化/覆盖索引.md)
- [ ] [回表](01-索引与查询优化/回表.md)
- [ ] [最左前缀原则](01-索引与查询优化/最左前缀原则.md)
- [ ] [执行计划](01-索引与查询优化/执行计划.md)
- [ ] [基数](01-索引与查询优化/基数.md)

### ⭐⭐ 强烈推荐
- [ ] [索引选择性](01-索引与查询优化/索引选择性.md)
- [ ] [索引下推](01-索引与查询优化/索引下推.md)
- [ ] [统计信息](01-索引与查询优化/统计信息.md)
- [ ] [参数嗅探](01-索引与查询优化/参数嗅探.md)
- [ ] [页分裂](02-存储与物理结构/页分裂.md)

### ⭐ 进阶选读
- [ ] [索引合并](01-索引与查询优化/索引合并.md)
- [ ] [索引提示](01-索引与查询优化/索引提示.md)

### 其他章节
- [ ] 存储与物理结构(7个术语)
- [ ] 事务与并发控制(8个术语)
- [ ] 日志与持久化(5个术语)
- [ ] 架构与设计模式(6个术语)
- [ ] 特定功能索引(5个术语)

团队学习进度 ​

创建一个共享文档,跟踪团队成员的学习情况:

成员已完成进行中下一步备注
张三5/11索引下推统计信息进展顺利
李四3/11最左前缀执行计划需要辅导
王五8/11页分裂事务章节表现优秀

❓ 常见问题 ​

Q1: 这么多术语,应该从哪里开始? ​

A: 从 ⭐⭐⭐ 优先级的 5 个术语开始:

  1. 覆盖索引
  2. 回表
  3. 最左前缀原则
  4. 执行计划
  5. 基数

这 5 个是日常开发中最常用的,掌握后可以解决 80% 的性能问题。

Q2: 理论太多,记不住怎么办? ​

A:

  1. 不要死记硬背,理解核心原理即可
  2. 多动手实践,在实验中加深理解
  3. 整理个人笔记,用自己的话解释
  4. 定期复习,间隔重复记忆

Q3: 如何判断自己是否掌握了? ​

A: 能够完成以下任务:

  • 看懂复杂查询的执行计划
  • 独立设计合理的索引策略
  • 诊断并解决性能问题
  • 向他人清晰解释这些概念

Q4: 知识库内容是否会更新? ​

A: 是的,会持续更新:

  • 补充剩余章节
  • 添加新的数据库特性
  • 根据反馈改进内容
  • 增加更多实际案例

Q5: 发现内容有误怎么办? ​

A: 欢迎反馈!

  • 提交 Issue 描述问题
  • 或直接提交 PR 修正
  • 或在使用指南中留言

📞 获取帮助 ​

遇到问题时 ​

  1. 查阅相关资料
  • 重新阅读术语笔记
  • 查看关联术语
  • 阅读参考资料中的官方文档
  1. 实验验证
  • 在测试环境复现问题
  • 尝试不同的解决方案
  • 记录实验结果
  1. 寻求帮助
  • 团队内部讨论
  • Stack Overflow 提问
  • 数据库官方论坛
  • 技术社区(知乎、掘金等)

🎉 开始学习 ​

现在您已经了解了如何使用本知识库,可以开始了!

推荐阅读顺序:

  1. 先看 README.md - 了解整体结构
  2. 再看 快速导航.md - 找到学习路径
  3. 开始学习第一个术语:覆盖索引

Released under MIT License.