MySql体系
先来看一下MySql的架构图:
MySql的存储引擎在架构的最下层,提供了各式各样的存储特性,下面介绍几个常用的存储引擎。
MyISAM
官方提供的一个存储引擎,在数据库的系统表和系统生成的临时表,有时会用到该存储引擎。
存储方式
- table.MYD:数据文件;
- table.MYI:索引文件;
- table.frm:结构文件;
特性
- 表级锁,查询时使用共享锁,修改时使用独占锁;
- 修复时,使用check table xxx 和 repair table xxx;
- 索引,在5.7之前为数不多的支持全文索引(Text和Blob前500个字符)和空间函数的存储引擎;
- 支持压缩,使用mysiampack压缩,会产生一个xxx.OLD文件,压缩后表为只读模式;
限制
mysql5.0之前,单表大小默认不能超过4G,可以用max_rows和avg_row_length修改。5.0以后的版本单表支持256TB。
使用场景
- 非事务OLAP应用,因为MYISAM不支持事务;
- 只读应用,因为压缩后是只读模式,但是会节约磁盘空间;
- 空间应用,5.7前唯一支持空间函数的存储引擎;
InnoDB
数据
结构还是存储在.frm文件中,但innoDB有自己的表空间,以.idb结尾,也可以使用系统表空间,但是不方便进行文件收缩,而且使用系统表空间,在多表操作时会有I/O瓶颈。
特性
支持事务,由redo log和undo log实现,redo log提供了内存缓冲区和内存日子文件,以顺序写的方式执行提交的事务,undo log提供了回滚与MVCC功能
支持行级锁,写操作时的锁定范围更少,提高了并发能力。
innodb还提供了状态检查,使用 show engine innodo status 查看最近N秒的服务器状态。
使用场景
- 使用大多的OLTP应用;
- 5.7后也有了全文索引和空间函数;
- 是非常常用的一种存储引擎,也是mysql现在默认的存储引擎了;
CSV
数据
以.csv文件存储数据,.csm文件存储表状态,.frm存储结构;
特性
- 所有列不能为空;
- 不支持索引;
- 可直接编辑文件内容,内容以“aa”,"bb"格式存储在.csv文件中;
场景
可以用于数据交换,当作中间表使用。
Archive
数据
- 以zlib存储数据,会对数据进行压缩,比例很高;
- 以.ARZ文件存储;
特点
- 只支持insert和select;
- 可以在自增列上创建索引;
场景
- 适合保存日志;
- 适合数据采集类应用;
Memary
数据
也叫HEAP,数据保存在内存中,文件只有一个.frm文件,保存结构。
特点
- 支持HASH和BTree索引,Hash用作等值,BTree用作范围;
- 所有字段都是固定长度的;
- 不支持BLOG和TEXT;
- 使用了表级锁;
- 表大小由max_heap_table_size决定;
场景
- 映射表;
- 分析数据用的中间表;
- 缓存周期性数据;