Skip to content
基础

一句话答案

InnoDB 支持事务/行锁/外键/MVCC/崩溃恢复(默认引擎),MyISAM 只支持表锁,适合读密集场景。

核心要点

InnoDB 使用 B+ 树作为索引结构。

B+ 树的核心特点:

                    [30 | 60]               ← 非叶子节点(只存 key,不存数据)
                   /    |    \
           [10|20]   [40|50]   [70|80]
          /  |  \   /  |  \   /  |  \
        叶子节点(存 key + 完整数据行 / 主键值)
        [10]->[20]->[30]->[40]->[50]->[60]->[70]->[80]
              ↑ 叶子节点之间用双向链表相连

关键特征:

  1. 非叶子节点只存 key,不存数据,路由用
  2. 叶子节点存 key + 数据(聚簇索引存完整行,二级索引存主键值)
  3. 叶子节点之间用双向链表连接,支持高效范围查询
  4. 所有数据都在叶子节点,查询路径长度固定(稳定的 O(log N))
追问与易错

追问方向:

  • 现在为什么几乎不用 MyISAM?
  • MyISAM count(*) 为什么快?
  • InnoDB count(*) 怎么优化?

易错点:

  • ❌ MyISAM 没有任何优势——全文检索场景可用
  • ❌ InnoDB 不支持全文索引——5.6+ 已支持

💡 记忆锚点

InnoDB 是全能选手——事务、行锁、MVCC、崩溃恢复样样都有,MyISAM 是快读选手——只有表锁没有事务,count(*) 飞快但不支持并发写。就像轿车(InnoDB 安全全能日常首选)和摩托车(MyISAM 简单快但防护少),现在几乎所有场景都选轿车。