本文已参与「新人创作礼」活动,一起开启掘金创作之路。
常见存储引擎
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)