全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-15 12 分钟 ✍️ juanwangdev

InnoDB存储引擎

InnoDB是MySQL 5.5后的默认存储引擎,支持ACID事务、行级锁、外键约束。

核心架构

内存结构

SQL
┌────────────────────────────────────────┐
│              InnoDB内存结构              │
├──────────────┬─────────────────────────┤
│  Buffer Pool │  Change Buffer          │
│  (数据页缓存)  │  (变更缓冲)              │
├──────────────┼─────────────────────────┤
│  Log Buffer  │  Adaptive Hash Index    │
│  (日志缓冲)    │  (自适应哈希索引)         │
└──────────────┴─────────────────────────┘

磁盘结构

SQL
┌────────────────────────────────────────┐
│              InnoDB磁盘结构              │
├──────────────┬─────────────────────────┤
│  系统表空间    │  独立表空间(.ibd)         │
│  (ibdata1)   │  (file-per-table)       │
├──────────────┼─────────────────────────┤
│  Redo Log    │  Undo表空间              │
│  (ib_logfile)│  (undo_*.ibd)           │
└──────────────┴─────────────────────────┘

核心特性

1. 事务支持(ACID)

SQL
START TRANSACTION;
UPDATE account SET balance = balance - 100 WHERE id = 1;
UPDATE account SET balance = balance + 100 WHERE id = 2;
COMMIT;
-- 或 ROLLBACK;

2. 行级锁

SQL
-- 共享锁
SELECT * FROM t1 WHERE id = 1 LOCK IN SHARE MODE;

-- 排他锁
SELECT * FROM t1 WHERE id = 1 FOR UPDATE;

3. MVCC多版本并发控制

  • 每行数据包含隐藏列:DB_TRX_IDDB_ROLL_PTRDB_ROW_ID
  • Read View实现一致性非锁定读
  • 快照读与当前读分离

4. 外键约束

SQL
CREATE TABLE orders (
    id INT PRIMARY KEY,
    user_id INT,
    FOREIGN KEY (user_id) REFERENCES users(id)
) ENGINE=InnoDB;

5. 聚簇索引

  • 主键自动创建聚簇索引
  • 数据按主键顺序存储
  • 辅助索引存储主键值
text
-- 聚簇索引结构示意
主键值  数据行(完整记录)

-- 辅助索引结构示意
索引键  主键值  回表查询数据行

存储文件

文件说明
.ibd独立表空间,存储表数据和索引
ibdata1系统表空间,存储数据字典等
ib_logfile0/1Redo Log文件

关键参数

text
-- 查看InnoDB配置
SHOW VARIABLES LIKE 'innodb%';

-- 常用参数
innodb_buffer_pool_size = 1G      -- Buffer Pool大小
innodb_log_file_size = 256M       -- Redo Log文件大小
innodb_flush_log_at_trx_commit = 1 -- 日志刷盘策略
innodb_lock_wait_timeout = 50     -- 锁等待超时

InnoDB支持在线热备份,通过mysqldump --single-transaction或XtraBackup实现。

要点总结

  • InnoDB是MySQL默认引擎,支持事务、行级锁、外键
  • 采用聚簇索引,主键查询效率高
  • MVCC实现高并发读写,避免锁竞争
  • Buffer Pool是核心内存结构,影响性能关键
  • 通过Redo Log和Undo Log保证事务持久性和原子性

📝 发现内容有误?点击此处直接编辑

← 上一篇 Buffer Pool与LRU算法
下一篇 → Memory存储引擎
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库