我们重点从在功能和性能上对比 InnoDB 和 MyISAM的区别。
myisam和innodb功能对比
InnoDB 和 MyISAM 的功能对比下表所示。
功能 | InnoDB | MyISAM |
---|---|---|
ACID事务 | 是 | 否 |
配置ACID属性 | 是 | 否 |
崩溃恢复 | 是 | 否 |
外键支持 | 是 | 否 |
行级锁粒度 | 是 | 否 |
MVCC | 是 | 否 |
- InnoDB 支持 ACID 的事务 4 个特性,而 MyISAM 不支持;
- InnoDB 支持 4 种事务隔离级别,默认是可重复读 Repeatable Read 的,MyISAM 不支持;
- InnoDB 支持 crash 安全恢复,MyISAM 不支持;
- InnoDB 支持外键,MyISAM 不支持;
- InnoDB 支持行级别的锁粒度,MyISAM 不支持,只支持表级别的锁粒度;
- InnoDB 支持 MVCC,MyISAM 不支持;
InnoDB 表最大还可以支持 64TB,支持聚簇索引、支持压缩数据存储,支持数据加密,支持查询/索引/数据高速缓存,支持自适应hash索引、空间索引,支持热备份和恢复等,如下表所示。
功能 | 支持 | 功能 | 支持 |
---|---|---|---|
存储限制 | 64 TB | 索引高速缓存 | 是 |
MVCC | 是 | 数据高速缓存 | 是 |
B 树索引 | 是 | 自适应散列索引 | 是 |
群集索引 | 是 | 复制 | 是 |
压缩数据 | 是 | 更改数据字典 | 是 |
加密数据 | 是 | 地理空间数据类型 | 是 |
查询高速缓存 | 是 | 地理空间索引 | 否 |
事务 | 是 | 全文搜索索引 | 是 |
锁定粒度 | 行 | 群集数据库 | 否 |
外键 | 是 | 备份和恢复 | 是 |
文件格式管理 | 是 | 快速索引创建 | 是 |
多个缓冲区池 | 是 | PERFORMANCE SCHEMA | 是 |
更改换冲 | 是 | 自动故障恢复 | 是 |
innodb和myisam性能对比
在性能对比上,InnoDB 也完胜 MyISAM,如下图所示。
- 读写混合模式下,随着 CPU 核数的增加,InnoDB 的读写能力呈线性增长。
- 在测试用例里,最高可达近 9000 的 TPS,但 MyISAM 因为读写不能并发,它的处理能力跟核数没关系,呈一条水平线,TPS 低于 500。
- 只读模式下,随着 CPU 核数的增加,InnoDB 的读写能力呈线性增长,最高可达近 14000 的 TPS,但 MyISAM 的处理能力不到 3000 TPS。
以上测试仅为说明 InnoDB 比 MyISAM 的处理能力强大,具体 TPS 测试数据跟硬件和测试条件不同而有很大差异。