MySQL架构学习——存储引擎
MyISAM
存储引擎表由MYD和MYI组成
特性
- 并发锁与锁级别
- 表损坏修复(check table 表名 repair table 表名)
- 支持索引类型
- 支持数据压缩(命令行 mysiampack -b (-f强制压缩) 表名)
限制
- 版本5.0之前默认表大小为4G
适用场景
- 非事务型应用
- 只读类应用
- 空间类应用
Innodb
Innodb使用表空间进行数据存储
innodb_file_per_table
ON:独立表空间:表名.ibd
OFF:系统表空间:ibdataX
系统表空间和独立表空间的对比
系统表空间无法简单的收缩文件大小
独立表空间可以通过optimize table命令收缩系统文件
系统表空间会产生IO瓶颈
独立表空间可以向多个文件刷新数据
一般Innodb使用独立表空间
特性
- 是一种事务性存储引擎
- 完全支持事务的ACID特性
- Redo LOG (同步日志,实现事务的持久性,有内存缓存和重做日志文件组成,顺序存储)和 Undo Log(回滚日志,记载未提交事务,随机IO)
- 支持行级锁,行级锁可以支持最大程度的并发,有存储引擎层实现
适用引擎
- 适合于大多数OLTP(联机事务处理)应用
阻塞和死锁
阻塞确保事务的并发可以正常的执行,大量的阻塞会导致性能下降
死锁双方互相等待对方所占有的资源
CSV
文件系统存储特点
- 数据以文本方式存储在文件中
- CSV文件存储表内容
- CSM文件存储表的元数据如表状态和数据量
- frm文件存储表结构信息
特点
- 以CSV格式进行数据存储
- 所有列必须都是不能为NULL
- 不支持索引
- 可以对数据文件直接编辑
不适合大表,不适合在线处理
适用场景
适合作为数据交换的中间表
Archive
文件系统存储特点
- 以zlib对表数据进行压缩,磁盘I/O更少
- 数据存储在ARZ为后缀的文件中
- 以frm文件存储表的结构信息
特点
- 只支持insert和select操作
- 只允许在自增ID列上加索引
- 存储空间占用小
使用场景
- 日志和数据采集类应用(不需要修改的)
Memory
文件系统存储特点
- 也称为HEAP存储引擎,数据保存在内存中
特点
- 支持HASH索引(等值查找时用,默认)和BTree索引(范围查找时用)
- 所有字段都为固定长度
- 不支持BLOG和TEXT等大字段
- 使用表级锁
- 表的最大大小有max_heap_size参数决定
使用场景
- 用于查找或者是映射表
- 用于保存数据分析中产生的中间表
- 用于缓存周期性聚合数据的结果表
Fedrated
特点
- 提供了访问远程MYSQL服务器上表的方法
- 本地不存储数据,数据全部放在远程服务器上
- 本地需要保存表结构和远程服务器的连接信息
使用场景
- 偶尔的统计与分析查询
存储引擎的选择
参考条件
- 事务
- 备份
- 崩溃恢复
- 存储引擎的特有特性