Skip to content

引擎

约 615 字大约 2 分钟

2025-08-29

image MySQL 的众多引擎中,唯有InnoDB支持事务,其也是 MySQL 的默认引擎(MySQL 5.5+),其次还有MyISAMMEMORY

MyISAM 和 InnoDB 区别

在 MySQL 5.5 之前,MyISAM 曾是 MySQL 的默认引擎,其查询性能极佳,但缺乏事务即行级锁的特性,在安全性与并发性能上弱于 InnoDB。 引用这位网友的观点,只有InnoDB才有聚簇索引的概念。MyISAM无论主键索引还是辅助索引其叶子节点存放的皆为数据的地址,因此皆是非聚簇;InnoDB主键索引的叶子节点直接存放数据,而辅助索引存放的是主键,因此有是非聚簇的概念 image

MyISAM

  • 仅支持表级锁
  • 不支持外键与事务
  • 支持全文索引,中文索引能力较弱
  • 每个表产生三个文件,.sdi表结构定义、.MYD表中数据、.MTI表索引
  • 写写、读写阻塞,读读不阻塞
  • 使用非聚簇结构,即索引与数据文件分开,索引只能缓存
  • 索引上可以认为均是随机访问,没有主键查询优势

InnoDB

  • 支持表级锁、行级锁(默认)
  • 支持外键与事务
  • 支持全文索引(5.6.4+)具有较好的中文索引能力
  • 一个表对应一个.ibd文件
  • 读写阻塞与事务隔离级别相关
  • 使用聚簇索引,索引即是数据,因此既能缓存索引也能缓存数据
  • 索引与数据均可缓存,因此当且仅当索引与数据均不在缓存中,才需要二次 IO

性能对比

在绝大多数生产环境下,InnoDB的效率都要比MyISAM高得多得多,InnoDB的多线程效率是只能单线程执行的MyISAM望尘莫及的

索引对比

InnoDB

InnoDB 使用 B+ 树,因为文件数据与索引在一个表中,因此对于主键索引能够单次索引查找目标,而对于辅助索引则需要二次回表查询 主键索引image辅助索引image 辅助索引仅查找到对应的主键信息,需要进行二次索引

MyISAM

同样使用 B+ 树,但使用非聚簇索引,数据文件与索引文件分开,需要二次 IO image