MySql体系
先来看一下MySql的架构图:mysql

MySql的存储引擎在架构的最下层,提供了各式各样的存储特性,下面介绍几个经常使用的存储引擎。sql
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存储结构;spa
特性
- 全部列不能为空;
- 不支持索引;
- 可直接编辑文件内容,内容以“aa”,"bb"格式存储在.csv文件中;
场景
能够用于数据交换,看成中间表使用。日志
Archive
数据
- 以zlib存储数据,会对数据进行压缩,比例很高;
- 以.ARZ文件存储;
特色
- 只支持insert和select;
- 能够在自增列上建立索引;
场景
Memary
数据
也叫HEAP,数据保存在内存中,文件只有一个.frm文件,保存结构。
特色
- 支持HASH和BTree索引,Hash用做等值,BTree用做范围;
- 全部字段都是固定长度的;
- 不支持BLOG和TEXT;
- 使用了表级锁;
- 表大小由max_heap_table_size决定;
场景