MySQL-存储引擎

225 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

常见存储引擎

InnoDB

特点:

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

MyISAM

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

特点:

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

Memory

Memory引擎的表数据是存储在内存中的

特点:

  • 存放在内存中,速度快
  • hash索引(默认)

存储引擎的选择

在选择存储引擎时,应该根据实际场景选择合适的存储引擎。

  • InnoDB: 如果对事物的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操作,则 InnoDB 是比较合适的选择
  • MyISAM: 如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不高,那这个存储引擎是非常合适的。
  • Memory: 将所有数据保存在内存中,访问速度快,通常用于临时表及缓存。更好的替代方案是Redis

存储引擎逻辑结构

  • Tablespace,表空间(ibd文件),一个mysql实例可以对应多个表空间,用于存储记录、索引等数据
  • 段,分为数据段、索引段、回滚段,InnoDB是索引组织表,数据段就是B+树的叶子节点,索引段即为B+树的非叶子节点。段用来管理多个Extent(区)。
  • 区,表空间的单元结构,每个区的大小为1M。默认情况下,InnoDB存储引擎页大小为16K,即一个区中一共有64个连续的页。
  • 页,是InnoDB存储引擎磁盘管理的最小单元,每个页的大小默认为16KB。为了保证页的连续性,InnoDB存储引擎每次从磁盘申请4-5个区。
  • 行,InnDB存储引擎是按行进行存放的(还包括隐藏字段trx_id, roll_pointer)