MySQL 5.5之前,默认的存储引擎一直是 MyISAM。
虽然 MyISAM 性能还行,各种特性也还不错(比如全文索引、压缩、空间函数等),但是 MyISAM 不支持事务和行级锁,更甚至崩溃后无法安全恢复。
因此 MySQL 5.5版本之后,引入了 InnoDB(事务性数据库引擎)作为默认的存储引擎。
下面来对比下这两个存储引擎:
- 是否支持行级锁
MyISAM 只有表级锁(table-level locking),而 InnoDB 支持行级锁(row-level locking)和表级锁,而且默认为行级锁。
也就是说,MyISAM 一锁就是锁住了整张表,在并发写的情况下非常影响性能。
- 是否支持事务
MyISAM 不支持事务。
InnoDB 提供事务支持,具有提交(commit)和回滚(rollback)事务的能力。
- 是否支持外键
MyISAM 不支持,而 InnoDB 支持。
- 是否支持数据库异常崩溃后的安全恢复
MyISAM 不支持,而 InnoDB 支持。
使用 InnoDB 的数据库在异常崩溃后,数据库重新启动的时候会保证恢复到崩溃前的状态。这个恢复过程依赖于 redo log。
- 是否支持 MVCC
MyISAM 不支持,而 InnoDB 支持。
MVCC 可以看作是行级锁的一个升级,可以有效减少加锁操作,提高性能。