简介
MySQL存储引擎负责数据的存储和读取,每个存储引擎都有自己的特点,MySQL 服务器通过API与存储引擎进行通信。
MySQL体系结构中,支持了很多存储引擎:InnoDB,MyISAM,Memory,NDB Cluster等
InnoDB
- 支持事务,行锁,外键
- 使用多版本并发控制(MVCC)来获得高并发
- 实现了4种隔离级别,默认为 Repeatable 级别。
- 使用一种被称为 next-key locking 的策略来避免幻读现象的产生。
- 高性能和高可用功能:插入缓冲、二次写、自适应哈希索引、预读
- 采用了聚集的方式,因此每张表的存储都是按主键的顺序进行存放的。
MyISAM
- 不支持事务、表锁设计;
- 支持全文索引。
- 只缓存索引文件,而不缓存数据文件;
- 存储引擎由 MYD 和 MYI 组成,MYD 用来存放数据文件,MYI 用来存放索引文件。
NDB
- NDB 存储引擎是一个集群存储引擎。
- 特点是数据全部放在内存中,因此主键查找的速度极快
-通过添加NDB数据存储节点可以线性地提高数据库性能,是高性能、高可用的集群系统。
Memory
- Memory存储引擎将表中的数据存放在内存中,如果数据库重启或发生崩溃,表中的数据都将丢失。
- 适合用于存储临时数据的临时表,以及数据仓库中的纬度表。
- 默认使用哈希索引
- 缺点:只支持表锁,并发性能差,不支持 Text 和 Blob 列类型。
Archive
- 只支持 INSERT 和 SELECT 操作,使用zlib算法将数据行进行压缩后存储,压缩比例一般可达1:10,
- 使用行锁来实现高并发的插入。
- 使用场景:适合存储归档数据(例如:日志信息)
总结
不同存储引擎特性如下:
功能 | MyISAM | Memory | InnoDB | Archive | NDB |
---|---|---|---|---|---|
存储限制 | 256TB | RAM | 64TB | 无限制 | 有限制 |
事务 | 支持 | ||||
锁粒度 | 表锁 | 表锁 | 行锁 | 行锁 | 行锁 |
MVCC | 支持 | 支持 | |||
B+树索引 | 支持 | 支持 | 支持 | 支持 | |
哈希索引 | 支持 | 内部将哈希索引应用于自适应哈希索引功能 | |||
全文索引 | 支持 | 支持 | |||
外键 | 支持 | ||||
地理空间数据类型 | 支持 | 支持 | |||
聚集索引 | 支持 | ||||
数据缓存 | N/A | 支持 | 支持 | ||
索引缓存 | 支持 | N/A | 支持 | 支持 | |
数据压缩 | 支持 | 支持 | |||
集群数据库 | 支持 | ||||
复制 | 支持 | 支持 | 支持 | 支持 | 支持 |
备份与恢复 | 支持 | 支持 | 支持 | 支持 | 支持 |