Skip to main content

存储引擎

David LiuAbout 2 min

存储引擎

InnoDB

兼顾高可靠性和高性能的通用存储引擎

MySQL5.5 后默认 InnoDB

特点

  1. DML 操作遵循 ACID,支持事务
  2. 行级锁,提高并发访问性能
  3. 支持外键 foreign key 约束,保证数据的完整性和正确性

文件

  • .frm: 表结构会保存在这个文件。在 MySQL 中建立一张表都会生成一个.frm 文件,该文件是用来保存每个表的元数据信息的,主要包含表结构定义。

  • .ibd: xxx 是表名,innoDB 引擎的每张表都会对应这样一个表空间文件,存储该表的表结构(frm、sdi)、数据和索引

    ibd 是二进制文件,无法直接打开,但是可以输入指令 ibd2sdi 得到可查看的 JSON

逻辑存储结构

img
  • 表空间 Tablespace
  • 段 Segment
  • 区 Extent
  • 页 Page
  • 行 Row

其他引擎及选择

MyISAM

MyISAM 是 MySQL 早期的默认存储引擎

特点

  • 不支持事务,不支持外键
  • 支持表锁,不支持行锁
  • 访问速度快

文件

  • .sdi 表结构
  • .myd 存放数据
  • .myi 存放索引,MyISAM没有聚簇索引,数据与索引是分开的

Memory

Memory 引擎的表数据时存储在内存中的,由于受到硬件问题、或断电问题的影响,只能将这些表作为临时表或缓存使用。

特点

  • 内存存放
  • hash 索引(默认)

文件

  • .sdi: 存储结构信息

对比

截屏2022-07-28 17.53.57

常见的几种 MySQL 存储引擎对比

这两种用的比较少,因为使用 MyISAM 的场景被 MongoDB 取代,Memory 的场景被 Redis 取代。

总结

  • InnoDB 支持行级别的锁粒度,MyISAM 不支持,只支持表级别的锁粒度。

  • MyISAM 不提供事务支持。InnoDB 提供事务支持,实现了 SQL 标准定义了四个隔离级别。

  • MyISAM 不支持外键,而 InnoDB 支持。

  • MyISAM 不支持 MVCC,而 InnoDB 支持。

  • 虽然 MyISAM 引擎和 InnoDB 引擎都是使用 B+Tree 作为索引结构,但是两者的实现方式不太一样。

    InnoDB的B+树主键索引的叶子节点就是数据文件,辅助索引的叶子节点是主键的值;而MyISAM的B+树主键索引和辅助索引的叶子节点都是数据文件的地址指针。

  • MyISAM 不支持数据库异常崩溃后的安全恢复,而 InnoDB 支持。

  • InnoDB 的性能比 MyISAM 更强大。

应用

核心数据 InnoDB

非核心数据可以 MyISAM,如足迹啥的