🌞

InnoDB 与 MyISAM 区别及适用场景

1. 索引结构

InnoDB 和 MyISAM 都使用 B+ 树作为索引结构,区别在于叶子节点:

  • MyISAM 的叶子节点存储的是数据记录所在的地址,MyISAM 存储数据有索引文件及数据文件,先在索引文件内找到数据的地址,称为非聚集索引,再到数据文件内找到具体的文件记录
  • InnoDB索引文件就是数据文件,主索引树的叶子节点存储的是行数据的数据页,页内存储了完整的行数据记录,称为聚集索引,辅助索引树叶子节点存储主键值

2. 事务、锁处理及外键支持的区别

InnoDB MyISAM
事务处理 事务安全 非事务安全
锁级别 行锁和表锁 表锁
外键支持 支持 不支持

3. 查询效率

InnoDB MyISAM

原因:

  • InnoDB要加载数据页到缓存内,MyISAM只缓存索引块,MyISAM较少的磁盘io
  • InnoDB映射到数据页、到行,MyISAM记录文件的offset,定位比InnoDB快
  • InnoDB需要维护版本并发控制

4. 适用场景

InnoDB MyISAM
多读多写 多读少写
有事务 无事务
高并发 非高并发
updatedupdated2020-05-282020-05-28