MySQL常见存储引擎及特点
0. 一些命令
0.1 查看支持的存储引擎
show engines;
0.2 查看某个引擎工作状态
show engine innodb status;
0.3 查看重要的属性
show VARIABLES like 'innodb%'
1. InnoDB
InnoDB 面向在线事务处理方面的应用
-
支持事务
-
支持行锁
-
支持外键
-
支持非锁定读
-
聚集索引
-
必须要有主键,且每张表都按照主键的顺序存放
-
如果没有主键,存储引擎会为每一行生成一个6字节的ROWID,作为主键
-
利用多版本并发控制实现各个隔离级别,默认隔离级别 REPEATABLE READ,通过next-key locking机制避免幻读
-
是Windows下的默认的存储引擎
2. MyISAM
MyISAM 对于一些在线分析处理操作速度快
- 不支持事务
- 表锁,并发性差
- 全文索引
- 除了Windows版本以外的,其他MySQL版本的默认存储引擎
- MyISAM存储引擎表由MYD和MYI组成,MYD用来存放数据文件,MYI用来存放索引文件
- 还可以通过myisampack工具进一步压缩(赫夫曼编码静态算法)数据文件,也可用该工具解压
- MySQL只缓存索引文件,数据文件由操作系统缓存
3. Memory
- 数据放在内存中
- 适合存储临时数据的临时表
- 默认使用哈希索引
- 表锁,并发性差
- 不支持TEXT和BLOG类型
- VARCHAR内部用CHAR存储,浪费了内存
- 如果大于了Memory容量设置会被转换为MyISAM存储引擎
4. Archive
- 只支持INSERT和SELECT操作
- 将数据行用zlib算法压缩后存储,一般压缩比例 1:10
- 适合存放归档数据,如日志信息
- 使用行锁实现高并发
- 不是事务安全
- 设计目标:提供高速的插入和压缩功能
5. Maria
- 新开发的存储引擎
- 目标:取代原有的MyISAM,成为默认的引擎
- 特点:缓存数据和索引文件,行锁,MVCC,事务和非事务可选,更好的BLOB类型处理