1、MySQL中常用的存储引擎
引擎名称 | 是否支持事务 | 说明 |
---|---|---|
MyISAM | N | MySQL 5.6 之前的默认引擎,最常用的非事务引擎; |
CSV | N | 以CSV格式存储数据,非事务型引擎; |
Archive | N | 只允许查询和新增数据而不允许修改数据; |
Memory | N | 将数据存储在内存中,不支持事务; |
InnoDB | Y | MySQL 5.6 之后的默认引擎,最常用的事务型存储引擎; |
NDB | Y | MySQL集群版使用的内存型事务存储引擎; |
2、MyISAM
-
特点:
- 不支持事务;
- 以堆表的方式存储,无聚集索引,避免了索引二次查找,提高了查找性能(查找性能优于InnoDB);
- 使用表级锁,在查找时会给表加上共享锁,修改表时会给表加上排它锁,读写会相互阻塞;
- 支持Btree索引、空间索引、全文索引;
-
适用场景:
不需要事务,读操作远大于写操作的场景;
3、CSV
-
特点:
- 不支持事务;
- 数据以CSV格式存储,可通过直接修改CSV文件来修改数据库数据;
- 所有列都不能为NULL;
- 不支持索引;
-
适用场景:适合作为数据交换的中间表,不适用于频繁查询、更新的场景;
4、Archive
-
特点:
- 不支持事务;
- 表数据使用 Zlib 压缩,节省存储资源;
- 只支持 Insert 和 Select 操作,不能修改和删除数据;
- 只允许在自增ID上建立索引;
-
适用场景:日志和数据采集类应用; 数据归档存储;
5、Memory
-
特点:
- 不支持事务;
- 数据保存在内存中,读写速度快,宕机会失去数据;
- 所有字段长度固定(char和varchar占用相同大小的空间),且不支持text等类型;
- 支持Btree索引和Hash索引,默认为Hash索引;
-
适用场景:用于缓存字典映射表; 缓存周期性分析数据; 与Redis功能相似;
6、InnoDB
-
特点:
- 支持事务 ACID;
- 数据按主键聚集存储,主键的大小会影响索引的性能,若主键顺序经常发生变化,会造成数据迁移或带来某些IO问题;
- 支持行级锁,读写时只在行上加锁,大大增强了其处理并发业务的性能;
- 支持MVCC(多版本并发控制),可以避免读写阻塞;
- 支持Btree索引、自适应Hash索引、全文索引、空间索引;
-
适用于大多数OLTP场景
7、NDB
-
特点:
- 支持事务;
- 使用时会把数据全都加载到内存中;
- 支持高可用集群;
- 支持Ttree索引;
-
适用场景: 需要数据完全同步的高可用场景;