作者:刘仁鹏
参考资料:《MySQL技术内幕 InnoDB存储引擎》
1.常用存储引擎介绍
1. InnoDB
- 支持事务
- 主要面向应用:OLTP(在线事务处理)
- 行锁设计
- 支持外键
- 支持非锁定读
- 使用多版本并发控制( MVCC)获得高并发性
- 实现了SQL标准的4种隔离级别,默认隔离级别为可重复读
- 使用next-key locking机制避免幻读
- 提供了插入缓冲、二次写、自适应哈希索引、预读等高性能、高可用的功能
- 采用聚集的方式存储数据(表的存储按主键顺序存放)
2.MyISAM
- 不支持事务
- 主要面向应用:OLAP(在线分析处理)
- 缓冲池只缓冲索引文件,而不缓冲数据文件(数据文件的缓存交由操作系统本身完成)
3.NDB
- 集群存储引擎
- 其结构是share nothing(即sharding)的集群架构
- 高可用,高性能
- 优点:索引数据全部放在内存中,因此主键查找的速度极快,并且可通过添加NDB数据存储节点线性地提高数据库性能
- 缺点:NDB存储引擎的连接操作(join)是在MySQL数据层完成的,而不是存储引擎层,这意味着,复杂的连接操作需要巨大的网络开销,因此查询速度很慢
4.Memory
- 将表中的数据存放在内存中,如果数据库重启或崩溃,表中的数据将全部消失
- 适用于:作为存储临时数据的临时表;数据仓库中的维度表
- 默认使用哈希索引,而不是B+树索引
- 只支持表锁,并发性能较差
- 不支持TEXT和BLOB列类型
- 存储变长字段是按照定长字段的方式进行的,因此会浪费内存
- 如果中间结果集大于Memory存储引擎表的容量设置,又或者中间结果含有TEXT或BLOB列类型字段,则MySQL数据库会把其转换到MyISAM存储引擎表而存放到磁盘中,而MyISAM不缓存数据文件,因此这时产生的临时表的性能对查询会有损失
5.Archive
- 适用于:存储归档数据,如日志信息
- 只支持INSERT和SELECT操作
- 支持索引
- 使用zlib算法将数据行进行压缩后存储,压缩比一般可达1:10
- 使用行锁来实现高并发的插入操作,但其本身不是事务安全的存储引擎
6.Federated
- Federated存储引擎表并不存放数据,它只是指向一台远程MySQL数据库服务器上的表
7.Maria
- MySQL创始人开发
- 设计目标主要是用来取代原有的MyISAM存储引擎,从而成为MySQL的默认存储引擎
- 特点:支持缓存数据和索引文件;行锁设计;支持MVCC;支持事务和非事务安全的选项;更好的BLOB字符类型的处理性能