| MyISAM | BDB | Memory | INNODB | Archive | NDB | |
|---|---|---|---|---|---|---|
| 容量限制 | NO | NO | YES | 64TB | NO | YES |
| 事务支持 | NO | NO | NO | YES | NO | YES |
| 锁级别 | Table | Page | Table | Row | Row | Row |
| MVCC | NO | NO | NO | YES | YES | YES |
| B-tree索引 | YES | YES | YES | YES | NO | YES |
| hash 索引 | NO | NO | YES | YES | NO | YES |
| Data caches | NO | NO | YES | YES | NO | YES |
| index caches | YES | NO | YES | YES | NO | YES |
| storage cost | low | low | N/A | high | very low | low |
| memory cost | low | low | medium | high | low | high |
| 批量插入速度 | hish | hish | hish | low | very high | high |
| 集群支持 | NO | NO | NO | NO | NO | YES |
| 外键支持 | NO | NO | NO | YES | NO | NO |
| geospatial支持 | YES | NO | NO | NO | NO | YES |
- MyISAM
不支持事务,行锁,支持全文索引,只缓存索引。可以借助myisampack工具实现的Huffman算法对数据进行压缩,压缩后数据只读但可以解压。 - Archive
只支持insert和select操作,支持索引。该引擎使用zlib算法对数据进行压缩,支持行锁但不支持事务,其设计的主要目的是提供高速的插入和压缩功能,多用于日志管理。 - Memory (Heap) 存储引擎
Memory存储引擎(之前称为Heap)将表中数据存放在内存中,如果数据库重启或崩溃,数据丢失,因此它非常适合存储临时数据。 - InnoDB
目前mysql的默认引擎,支持行锁、事务、外键等操作。拥有MVCC提供的安全高并发能力,实现了4种事务隔离级别- READ UNCOMMITTED(未提交读)
- READ COMMITTED(提交读)
- REPEATABLE READ(可重复读)
- SERIALIZABLE(串行化)
并提供了诸如插入缓冲、二次写、自适应哈希索引、预读等功能。
- NDB
NDB存储引擎是一个集群存储引擎,类似于Oracle的RAC,但它是Share Nothing的架构,因此能提供更高级别的高可用性和可扩展性。NDB的特点是数据全部放在内存中,因此通过主键查找非常快。
关于NDB,有一个问题需要注意,它的连接(join)操作是在MySQL数据库层完成,不是在存储引擎层完成,这意味着,复杂的join操作需要巨大的网络开销,查询速度会很慢。