外观
一句话答案
InnoDB 支持事务/行锁/外键/MVCC/崩溃恢复(默认引擎),MyISAM 只支持表锁,适合读密集场景。
核心要点
InnoDB 使用 B+ 树作为索引结构。
B+ 树的核心特点:
[30 | 60] ← 非叶子节点(只存 key,不存数据)
/ | \
[10|20] [40|50] [70|80]
/ | \ / | \ / | \
叶子节点(存 key + 完整数据行 / 主键值)
[10]->[20]->[30]->[40]->[50]->[60]->[70]->[80]
↑ 叶子节点之间用双向链表相连关键特征:
- 非叶子节点只存 key,不存数据,路由用
- 叶子节点存 key + 数据(聚簇索引存完整行,二级索引存主键值)
- 叶子节点之间用双向链表连接,支持高效范围查询
- 所有数据都在叶子节点,查询路径长度固定(稳定的 O(log N))
追问与易错
追问方向:
- 现在为什么几乎不用 MyISAM?
- MyISAM count(*) 为什么快?
- InnoDB count(*) 怎么优化?
易错点:
- ❌ MyISAM 没有任何优势——全文检索场景可用
- ❌ InnoDB 不支持全文索引——5.6+ 已支持
💡 记忆锚点
InnoDB 是全能选手——事务、行锁、MVCC、崩溃恢复样样都有,MyISAM 是快读选手——只有表锁没有事务,count(*) 飞快但不支持并发写。就像轿车(InnoDB 安全全能日常首选)和摩托车(MyISAM 简单快但防护少),现在几乎所有场景都选轿车。