MySQL:存储引擎
accttodo 12/31/2023 后端数据库MySQL
目录
参考:
# MySQL:存储引擎
存储引擎:存储数据、建立索引、更新/查询数据等技术的实现方式。
存储引擎是基于表的,而不是基于库的,所以存储引擎也被称为表类型。

- 连接层:提供一些客户端和连接服务,主要完成连接处理、授权认证等相关的安全方案。同时服务器也会为每个安全连接的用户验证其操作权限。
- 服务层:主要完成大多数核心服务功能,如:SQL接口,并完成缓存的查询,SQL的分析和优化。所有跨存储引擎的功能也在这一层实现,如存储过程、函数等。
- 引擎层:存储引擎真正负责MySQL中数据的存储和使用,服务器通过API和存储引擎进行通信。不同的存储引擎具有不同的功能,可根据具体需求选择最适合的存储引擎。
- 存储层:主要是将数据存储在文件系统上,并完成与存储引擎的交互。
注意:索引是在引擎层完成的,不同的存储引擎的索引结构不同。
MySQL5.5及之后默认的存储引擎INNODB,之前默认支持MyISAM。
查询当前数据库支持的存储引擎
show engines;
1
在创建表时,指定存储引擎
create table 表名(
字段 数据类型 约束,
字段 数据类型 约束
) engine = 存储引擎名称;
1
2
3
4
2
3
4
InnoDB、MyISAM、Memory存储引擎的对比

# InnoDB
InnoDB是一种兼顾高可靠和高性能的通用存储引擎,在MySQL5.5及之后,InnoDB是默认的MySQL存储引擎。
特点
- DML操作遵循ACID原则,支持事务;
- 支持行锁,采用MVCC来支持高并发 ;
- 支持外键FROEIGN KEY约束,保证数据的完整性和正确性;
- 支持崩溃后的安全恢复;
- 不支持全文索引。
逻辑存储结构

# MyISAM
MyISAM是MySQL早期(MySQL5.5之前)默认的存储引擎
特点
- 不支持事务,不支持外键
- 支持表锁,不支持行锁
- 访问速度快
- 在表有读取查询的同时,支持往表中插入新纪录
- 对于不会进行修改的表,支持压缩表,极大减少磁盘空间占用
# Memory
Memory引擎的表结构存储数据在内存中,由于受到硬件问题、电源问题的影响,只能将这些表作为临时表或缓存使用。
特点
- 内存存放,访问速度快
- 支持hash索引