数据库专题引言
本专题从日常开发最常踩坑的三类能力切入:索引、事务与锁、隔离级别。目标不是罗列 SQL 语法,而是建立可迁移的心智模型——理解存储引擎在做什么,再反推该如何写查询、如何设计表、如何排查慢 SQL 与并发问题。
默认以 MySQL + InnoDB 为主线(业界最常见的 OLTP 组合);概念层对 PostgreSQL 等引擎同样适用,差异会在文中点出。
为什么要系统学这三块
| 主题 | 解决什么问题 | 不懂时的典型症状 |
|---|---|---|
| 索引 | 查得快、写得稳、扫表可控 | 慢查询、全表扫描、索引建了却用不上 |
| 事务 | 一组操作要么全成功要么全失败 | 部分写入、对账不平、回滚后状态错乱 |
| 锁与隔离级别 | 多事务同时读写时的正确性与吞吐 | 脏读、幻读、死锁、接口偶发超时 |
索引偏「读路径与存储结构」;事务、锁、隔离级别偏「写路径与并发控制」。二者在 InnoDB 里通过 B+ 树索引 + MVCC + 行锁 交织在一起。
学习路线图
graph TD
A["数据库总览"] --> B["索引体系"]
A --> C["事务基础"]
B --> B1["索引类型与结构"]
B --> B2["优化与失效场景"]
C --> D["隔离级别"]
C --> E["锁机制"]
D --> F["并发问题复盘"]
E --> F
B2 --> F
建议顺序:
若需要先补底层树结构,可先读数据结构专题中的 B 树与 B+ 树,再回到本专题的索引实践。
文档地图
索引
| 文档 | 内容 |
|---|---|
| 索引总览 | 为什么需要索引、聚簇/二级索引、回表与覆盖 |
| 索引类型 | 主键、唯一、联合、前缀、全文等 |
| 索引优化 | 最左前缀、失效场景、EXPLAIN、设计原则 |
事务与并发
| 文档 | 内容 |
|---|---|
| 事务基础 | ACID、提交/回滚、undo/redo 直观理解 |
| 隔离级别 | 读未提交~可串行化、脏读/不可重复读/幻读、MVCC |
| 锁机制 | 行锁/间隙锁/临键锁、意向锁、死锁与排查 |
阅读约定
- 先结论,后机制:每篇尽量先给可落地的判断,再展开原理。
- 以 InnoDB 默认行为为准:例如默认隔离级别为
REPEATABLE READ。 - 示例 SQL 可直接实验:建议在测试库验证,不要在生产库试锁与长事务。
- 与数据结构互补:本专题讲「数据库怎么用结构」;树的定义与性质见
data-structures/。