这个blog我们来聊聊MySQL 常用的存储引擎
一.MySQL存储引擎概述
存储引擎 | 描述 |
---|---|
InnoDB 引擎 | 支持事务,使用最广泛的存储引擎 |
MyISAM 引擎 | MySQL 5.1之前默认存储引擎,不支持事务,表锁 |
Memory 引擎 | 数据保在内存中,重启后会丢失,可以加快查询速度 |
NDB集群引擎 | 分布式、share-nothing的、容灾的、高可用的NDB数据库集合 |
Archive 引擎 | 只支持insert、select操作,更节省表空间 |
Blackhole引擎 | 只记日志不实际存储数据,用于复制数据到备库 |
CSV引擎 | 将csv文件(逗号分隔) 当成MySQL表来处理,不支持索引 |
Federated引擎 | 访问其它MySQL服务器的一个代理 |
Merge 引擎 | 分区表后,该引擎已弃用 |
二.MyISAM存储引擎
功能 | 是否支持 |
---|---|
B-tree索引 | yes |
备份/基于时间点的恢复 恢复基于mysql的binlog而不是存储引擎 |
yes |
集群数据库 | no |
聚簇索引 | no |
数据压缩 | yes( 用compressed row format,表只读) |
数据缓存 | no |
数据加密 | yes(在服务器中通过加密功能实现) |
外键 | no |
全文索引 | yes |
空间数据 | yes |
空间索引 | yes |
哈希索引 | no |
索引缓存 | yes |
锁级别 | 表锁 |
MVCC(多版本并发控制) | no |
复制支持 | yes(server级的binlog) |
存储限制 | 256TB |
T-tree 索引 | no |
事务 | no |
更新数据字典的统计信息 | yes |
MyISAM因为不支持事务,如果异常断电,会导致数据丢失。
而且断电后很容易导致表损坏,需要进行表修复
myisamchk -r tablename
三.InnoDB存储引擎
功能 | 是否支持 |
---|---|
B-tree索引 | yes |
备份/基于时间点的恢复 恢复基于mysql的binlog而不是存储引擎 |
yes |
集群数据库 | no |
聚簇索引 | yes |
数据压缩 | yes |
数据缓存 | yes |
数据加密 | yes(在服务器中通过加密功能实现) |
外键 | yes |
全文索引 | yes(MySQL 5.6版本开始支持) |
空间数据 | yes |
空间索引 | yes(MySQL 5.7版本开始支持) |
哈希索引 | no |
索引缓存 | yes |
锁级别 | 行锁 |
MVCC(多版本并发控制) | yes |
复制支持 | yes(server级的binlog) |
存储限制 | 64TB |
T-tree 索引 | no |
事务 | yes |
更新数据字典的统计信息 | yes |
如果非必要情况,建议所有的表都使用InnoDB存储引擎,数据保护级别更高,维护也更方便。
四.Memory存储引擎
功能 | 是否支持 |
---|---|
B-tree索引 | yes |
备份/基于时间点的恢复 恢复基于mysql的binlog而不是存储引擎 |
yes |
集群数据库 | no |
聚簇索引 | no |
数据压缩 | no |
数据缓存 | N/A |
数据加密 | yes(在服务器中通过加密功能实现) |
外键 | no |
全文索引 | no |
空间数据 | no |
空间索引 | no |
哈希索引 | yes |
索引缓存 | N/A |
锁级别 | 表锁 |
MVCC(多版本并发控制) | no |
复制支持 | Limited (See the discussion later in this section.) |
存储限制 | RAM |
T-tree 索引 | no |
事务 | no |
更新数据字典的统计信息 | yes |
Memory存储引擎适用场景:
1.频繁被访问的字典表(读多写少)
2.数据分析中的中间结果
3.ETL过程中的中间结果表