MyISAM :不支持主外键
不支持事务
只有表级锁,即使操作一条记录也要锁住整个表,不适合高并发
只缓存索引,不缓存真实数据
*MyISAM* 强调的是性能,每次查询具有原子性,其执行速度比InnoDB类型更快,
提供了大量的特性,包括全文索引、压缩、空间函数等最大的缺陷就是崩溃后无法安全恢复
MyISAM是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行.上述语句时只需要读出该变量即可,速度很快;
*InnoDB*:支持主外键
支持事务,具有事务、回滚和崩溃修复能力的事务安全型表
支持行级锁和表级锁,默认为行级锁。行级锁操作只锁一行,不对其它行有影响,合适高并发
InnoDB是聚簇索引,聚簇索引的文件存放在主键索引的叶子节点上,因此InnoDB必须要有主键,通过主键索引效率 很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索弓|也都会很大。
支持MVCC,应对高并发事务, 多版本并发控制(MVCC)比单纯的加锁更高效;
MVCC只在 read committed 和 repeatable read 两个隔离级别下工作;
MVCC可以使用 乐观(optimistic)锁 和 悲观(pessimistic)锁来实现;
各数据库中MVCC实现并不统一。